1

ActiveMQ への移行中に遭遇した問題を解決する方法について誰かがアイデアを持っているかどうかを確認するためにあなたのところに来ました。このプロジェクト内で (C# で) 通知を送信するために ActiveMQ を使用しています。実装を終了した後、スレッドの問題に関するいくつかのエラーが見つかりました。(その例外の解決策は「if this.InvokeRequired ....など」を使用することですが、私の質問は次のとおりです。

この呼び出しを必要とするすべてのメソッドを見つける方法はありますか?

もちろん、通知でトリガーされたすべてのイベントを段階的に確認できましたが、時間がかかりすぎるという事実を除けば、将来のプログラミングエラーを解決することはできません.

これを理解するためのより良い方法があると思いますが、今は思いつきません。以前にこの問題に遭遇したことがありますか?

ご助力ありがとうございます

4

2 に答える 2

3

いいえ。もちろん、最初からテスト駆動プロジェクトをセットアップしていない限り、これを自動化する方法はありません。その場合、スレッドの正確性をテストするためにいくつかの条件を追加できます。

ソフトウェアは、非常に特殊な方法 (たとえば、FxCop や、特定の事柄に関する IDE の警告) を除いて、ユーザーが意図したものを推測することはできません。あなたが書いたものは、必ずしもあなたが書きたかったものではありません。あなたは、自分が何をしようとしているのかを理解できるソフトウェアを効果的に求めています。

呼び出しが必要かどうかを知る唯一の方法は、特定の関数が動作するコンテキストを知ることです。バックグラウンド スレッドで動作し、メイン スレッドで実行する必要があるコード (GUI コードなど) を呼び出す場合は、invoke が必要です。

あなたはそれを自分で理解しなければなりません。

于 2009-06-11T06:46:08.713 に答える
1

呼び出している特定のメソッドが呼び出しを必要とするわけではありません。これらのメソッドを呼び出すスレッドによって異なります。

UI スレッド以外のスレッドで Winforms アプリのメソッドを呼び出す場合は、Invoke が必要になります。

コードによっては、特にバックグラウンド スレッドに名前を付ける場合 (常に便利です)、どのスレッドからどの呼び出しが行われたかを簡単に分析できるはずです。しかし、おそらくこれを自動的に行う方法はありません。一歩下がってコードを見てください。

于 2009-06-11T06:49:37.880 に答える