c#停止库内的代码执行
我试图在C#Winforms中找出是否有可能通过调用函数而不是c#停止库内的代码执行,c#,php,winforms,C#,Php,Winforms,我试图在C#Winforms中找出是否有可能通过调用函数而不是返回来停止代码执行 以下代码在PHP中是可能的 if($something == null) $this->response->error(0); // This code is never executed if the condition is true echo 'Hello'; 库响应,有如下内容: public class Response { public function error($ind
返回来停止代码执行
以下代码在PHP中是可能的
if($something == null)
$this->response->error(0);
// This code is never executed if the condition is true
echo 'Hello';
库响应
,有如下内容:
public class Response
{
public function error($index)
{
$response = array();
switch ($index)
{
case 0: $response = array('msg' => 'fields missing..'); break;
}
// The trick is here
exit(json_encode($response));
}
}
因此,在C#项目中,在我的表单中,我这样调用响应库:
private void button1_Click(object sender, EventArgs e)
{
libraries.Response Response = new libraries.Response();
if(textBox1.Text == "")
Response.error(0);
// The code continues to get executed even if the condition is true
button2.PerformClick();
}
该响应触发一个消息框
,该消息框显然没有使代码执行停止的任何内容
class Response
{
public void error(int index)
{
string msg = "";
switch (index)
{
case 0: msg = "Fields missing.."; break;
}
MessageBox.Show(msg, "My app", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
现在,我知道我可以使用返回
,如下代码所示停止代码执行,但我想知道是否还有其他东西可以放在库响应
中,这样做
if(textBox1.Text == "")
{
Response.error(0);
return;
}
您还可以使用else
子句:
if(textBox1.Text == "")
{
Response.error(0);
}
else
{
button2.PerformClick();
}
但如果您没有抛出错误,请使用goto
语句,如果elses不想使用太多,那么return
是您的选择
编辑
使调用方方法停止从我能想到的被调用方法执行的唯一选项(完全关闭应用程序除外)是在.NET中抛出一个异常
要在异常情况下停止代码的执行,可以抛出一个异常。这样,在throw语句之后的代码行将不会执行,异常将在堆栈中冒泡,直到与catch块的特定异常类型和代码匹配的第一行代码执行为止。如果在调用堆栈中找不到合适的try-catch块,则进程将终止,并向用户显示一条消息
异常不应用于作为程序的一部分更改程序流
通常执行的。例外情况应仅用于报告和
处理错误条件
要抛出一个you-can-use语句。例如:
public string GetObjectTypeName(object something)
{
if(something==null)
throw new Exception("Some Exception Message");
return something.GetType().Name;
}
有关更多信息,请参阅以下资源:
库代码是否在后台工作程序或任务中异步运行?如果它在后台工作程序中,您可以向该工作程序订阅一个事件,并将其挂接到该事件中以终止它。如果它在同一线程上运行,那么代码线程将被锁定,直到库返回为止。在.NET中,要停止异常状态下的代码执行,可以抛出异常。这样,在throw语句之后的代码行将不会执行,异常将冒泡,直到第一个try/catch块和catch块的代码执行。异常不是答案,因为我想使用MessageBox
,否则异常的UI将吓坏用户。无论如何,谢谢。不要显示可怕的异常UI!您可以使用try catch
块处理异常
,并显示消息框
,或记录错误,或向用户隐藏错误,或执行其他恢复任务。另外,Application.ThreadException
或AppDomain.CurrentDomain.UnhandledException
事件是一些其他有用的事情,您应该了解更多关于它们的信息。我相信使用异常是你应该采取的方式:)看看我在回答中发布的那些有用的链接。目标是有两行代码1。条件2。回应。当然,我知道我可以使用Try-Catch块、return或else条件,但这不是我的目标。在数据访问层、业务逻辑等代码库中显示MessageBox
没有意义。异常抛出/处理是C#world中该问题的唯一解决方案:)如果您对答案有任何其他问题,或者您觉得它有用,请告诉我:)