return
ではなく関数を呼び出すことで、コードの実行を停止できる場所があれば、C#Winformsで把握しようとしています。ライブラリ内でC#コードの実行を停止する
次のコードは、PHP
if($something == null)
$this->response->error(0);
// This code is never executed if the condition is true
echo 'Hello';
とライブラリresponse
で可能であるようなものがあります:C#プロジェクトで、だから、
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));
}
}
をし、私のフォームの中に、私はこのresponse
ライブラリを呼び出しますway:
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);
}
}
今、私は以下のコードは、コードの実行を停止するように示して、私はreturn
を使用できることを知っているが、私はトリックを行うだろうライブラリresponse
に置くことができる何か他のものがあります場合、私は不思議でしたか?
if(textBox1.Text == "")
{
Response.error(0);
}
else
{
button2.PerformClick();
}
いますが、goto
ステートメントを使用して、エラーを投げていないと多くを使用しない場合return
はあなたのオプションをある-場合よそその後:
if(textBox1.Text == "")
{
Response.error(0);
return;
}
ですライブラリのコードはバックグラウンドのワーカーまたはタスクで非同期で実行されていますか?バックグラウンドワーカーにいる場合は、ワーカーをイベントに登録して、そのワーカーを殺すことができます。同じスレッド上で実行されている場合、コードスレッドはライブラリが返るまでロックされます。 –
例外的な状態でコードの実行を停止するには、例外をスローすることができます。このようにして、throw文のコード行は実行されず、最初のtry/catchブロックとcatchブロックのコードが実行されるまで、例外はバブルアップします。 –