他の誰かが書いたコードを理解しようとしています。私は何が起こっているのかを大体理解していますが、正確ではありません。問題は、問題のコードが別のスレッドで実行され、その 2 番目のスレッドでイベントを処理することです。ただし、ユーザーにアラートを表示する必要があり、UI が最初のスレッドで実行されているため、もちろん、2 番目のスレッドからアラートを起動しても表示されません。では、2 番目のスレッドによって取得されたビジネス オブジェクトをハンドオフまたはマーシャリングする最初のスレッドに「切り替え」て、最初のスレッドがそれを処理してアラートを表示できるようにするにはどうすればよいでしょうか。このような状況でデリゲートを使用すると思いましたが、デリゲートはまだ 2 番目のスレッドで起動していますか?
2 番目のスレッドのコードは次のとおりです。
public delegate void MessageReceivedEventHandler(object sender, MessageEventArgs args);
public class MessageEventArgs : EventArgs
{
...snip...
}
public class MSMQListenerService
{
...
public event MessageReceivedEventHandler MessageReceived;
....
public void Start()
{
...
//this is where we jump to a second thread as this method is IAsyncResult
_queue.BeginReceive();
...
}
....
}
最初のスレッドのコード:
....snip...
x = new MSMQListenerService(@".\private$\abc");
x.MessageReceived += x_MessageReceived;
x.FormatterTypes = new Type[] { typeof(LoginStatusMessage) };
x.Start();
...snip....
void x_MessageReceived(object sender, MessageEventArgs args)
{
//this handler is running on a different thread???
//I'm OK with that just need to get the args back to the first thread
}
そのため、投稿を圧倒することなく、関連すると思われるコードを投稿しました。何か不足している場合はお知らせください。すぐに追加します。
ティアJB