1

.NET 4.0を介したWinformsアプリケーションの作成(VB2010を使用)。これには、イベントを非同期的に発生させるActiveXCOMコントロールを含む単一の形式があります。イベントは、フォームのコードファイルのフック関数によって処理されます。アプリケーションはスレッドを開始しません(もちろん、メインスレッドを除く)。

イベントハンドラーの再入可能性から保護する必要がありますか?イベントAのフック関数の実行中にイベントBのフック関数を呼び出すことはできますか?

{Webを検索すると、いくつかの矛盾する答えが出てきました。私はここで困惑しています...}

4

2 に答える 2

2

ActiveXコントロールと.NETコントロールの違いはありません。イベントで何をするにしてもコントロールに影響を与えるイベントハンドラーは、確かに別のイベントを発生させる可能性があります。または、イベントAが再度発生する可能性があります。別のイベントが問題を引き起こすことはめったにありませんが、後者の場合は通常、このサイトの名前の例外が発生します。そして、同じ方法で修正します。これは、再入力を防ぐブールフィールドです。

基礎となるメカニズムは同じです。ActiveXコントロールも、プロパティセッターでイベントを発生させることができます。それは、スレッドやシングルスレッドのアパートとは何の関係もありません。

于 2012-11-17T21:58:47.627 に答える
1

どのActiveXコントロールとどのイベントが関係しているかを知らなくても、答えはかなり一般的です。

再入可能性は常に適切な方法で処理する必要があります。
再突入を「破棄」するか、並行して処理するか、「キューに入れて」次々に処理することができます。

詳細がなければ、より具体的にする方法がわかりません:-(

于 2012-11-17T21:46:13.337 に答える