2016-09-01 5 views
1

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; 
} 
+0

ですライブラリのコードはバックグラウンドのワーカーまたはタスクで非同期で実行されていますか?バックグラウンドワーカーにいる場合は、ワーカーをイベントに登録して、そのワーカーを殺すことができます。同じスレッド上で実行されている場合、コードスレッドはライブラリが返るまでロックされます。 –

+0

例外的な状態でコードの実行を停止するには、例外をスローすることができます。このようにして、throw文のコード行は実行されず、最初のtry/catchブロックとcatchブロックのコードが実行されるまで、例外はバブルアップします。 –

答えて

0

また、あなたはelse句を使用することができます。

EDIT

私は(完全にあなたのアプリケーションをシャットダウンを除く)を考えることができますと呼ばれる方法で実行を停止するために、呼び出し元のメソッドを作成するための唯一のオプションExceptionを投げることです。

1

例外的な状況でコードの実行を停止するには、例外をスローすることができます。このようにして、throwステートメントであるコード行は実行されず、catchブロックの特定の例外タイプとコードと一致する最初のtry-catchが実行されるまで、例外がスタックにバブルアップします。コールスタックに適切なtry-catchブロックが見つからない場合、プロセスは終了し、メッセージがユーザに表示されます。

プログラムのフローを通常の実行の部分 として変更する場合は、例外を使用しないでください。例外は報告するためにのみ使用し、 はエラー状態を処理する必要があります。

Exceptionを投げるにはthrowの文を使用できます。たとえば:詳細については

public string GetObjectTypeName(object something) 
{ 
    if(something==null) 
     throw new Exception("Some Exception Message"); 

    return something.GetType().Name; 
} 

は、これらのリソースを見てみましょう:

+0

私は 'MessageBox'を使用したいので、例外は答えではありません。さもなければ、ExceptionのUIがユーザから生きたものを恐れるでしょう。とにかくありがとう。 – Linesofcode

+0

恐ろしい例外UIを表示しないでください! 'try-catch'ブロックを使って' Exception'を処理し、 'MessageBox'を表示したり、エラーを記録したり、ユーザから隠したり、他の回復タスクを実行することができます。また、 'Application.ThreadException'や' AppDomain.CurrentDomain.UnhandledException'イベントは、あなたがそれらについてもっと知っておくべき他の有用なものです。私は例外を使用してあなたが行かなければならない方法だと思う:)私は答えで投稿したそれらの便利なリンクを見てみましょう。 –

+0

目標は、2つのコード行を持つことです。1.条件、2.応答。もちろん、Try Catchブロック、リターンまたはその他の条件を使用できることはわかっていますが、それは私の目標ではありません。 – Linesofcode

関連する問題