Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#停止库内的代码执行_C#_Php_Winforms - Fatal编程技术网

c#停止库内的代码执行

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

我试图在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($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中该问题的唯一解决方案:)如果您对答案有任何其他问题,或者您觉得它有用,请告诉我:)