ここから本文です

C#で何らかのエラーでイベントを終了したいと思いますが、どのように書けばいいで...

blu********さん

2013/9/710:28:20

C#で何らかのエラーでイベントを終了したいと思いますが、どのように書けばいいでしょうか。
Windows Formアプリケーションです。

処理スタート(フォーム上のボタンを押下し、イベントをスタート)

メソッド呼び出し1

メソッド呼び出し2
このメソッドの中で何らかの計算をし、間違っているのであればイベントを終了

メソッド呼び出し3

処理終了


このメソッド2の中でイベント終了をしたいと思います。
returnだとメソッド呼び出し3まで実行されてしまうと思います。

environment.exitをアプリを終了させてしまうので、違います。
あくまでイベントを途中で終了させるにはどのようなコードを書けばよいのでしょうか?

閲覧数:
5,884
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

2013/9/717:32:20

もしかして、イベントハンドラに複数の処理が登録されているイベントが実行されたときに他の処理をキャンセルしたい、的なことでしょうか?(違ったらごめんなさい。)
Button.Click += (a,b) => { 処理1 }
Button.Click += (a,b) => { 処理2 }
Button.Click += (a,b) => { 処理3 }
で、処理2の結果によって処理3を中止したい、的な。

もしそういうことでしたら、イベントのaddとremoveを自分で定義することになると思います。
addのときにListにでも登録しておき、イベントを実行するメソッド(On○○が通例)のところでキャンセルする機能を付けることができるのではないでしょうか。
キャンセルの方法は、FormClosingのようにEventArgsを継承したクラスにキャンセル用のプロパティを設けて、それがキャンセルになっていれば処理を抜けることになるでしょう。
http://ufcpp.net/study/csharp/sp_event.html


ただし、複数登録されたイベントが最後まで実行されないのが妥当かは不明です。
FormClosingとFormCloseのようにボタンが押されたら常に実行されるClicked的なのと、処理が続行される場合に実行されるClicked的なものに分けるなどの工夫が必要かもしれません

重ねますが、意味を勘違いしていたらすいません。m(__)m

質問した人からのコメント

2013/9/10 14:57:09

感謝 皆様。大変参考になるご回答ありがとうございます。感謝です。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

REIMERさん

編集あり2013/9/715:18:01

メソッド2の中で誤っていた際の動作に制限はないようですが、
以下のような実装ではダメなのでしょうか?

案1)
メソッド2で計算結果によりtrue/falseを返す
※trueの時にメソッド3を実行ではなく、falseの際にreturnでも良さそうです

処理スタート(フォーム上のボタンを押下し、イベントをスタート)

メソッド呼び出し1

if(メソッド呼び出し2){
メソッド呼び出し3
} else {
//何か間違い次の処理が必要ならここに
}

処理終了

案2)
メソッド2で計算結果が間違っている場合throw new Exception("不正である理由")を実行

処理スタート(フォーム上のボタンを押下し、イベントをスタート)

メソッド呼び出し1

try{
メソッド呼び出し2
メソッド呼び出し3
} catch(Exception e) {
//何か間違い時の処理が必要ならここに
}

処理終了

質問の主旨は、わかりますが、構造により異なります。
イベントを発生させるメソッドは、一般に頭にOnを付けますが、計算終了時にイベントを発生させる定義を書いたメソッドをOnFinish() にしたとします。
そうすると、計算用のメソッド2内で、計算が終わった時にOnFinish() を実行するようにしているでしょうが、その場合は、return で問題ないです。
計算時のエラーの際にreturnすれば、OnFinish() は実行しないので、終了時イベントのメソッドも実行されません。

構造の違いによります。

あと、マルチスレッドプログラミングの場合も、質問の類の問題が、よく発生します。
構造の違いによりますので、詳細を書いて、再質問されたほうがよいと思います。
(補足は、記述量制限が厳しいので)
特に、イベントをどのように発生するようにしているのか、詳細を記したほうが、よいと思います。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる