簡単に言うと、私がやろうとしているのは、別のスレッドでプロセスを起動して必要なことを実行し、イベントが発生して「必要なことを完了した」と言うのを待つことで、「DoingSomething」を処理することです。行う"。ただしEventArgs
、プロセス中に発生する可能性のあるエラーに対するプロパティがあります。これが私の状況の簡単な例です。
public class MessageHandler
{
private AutoResetEvent MessageHasSent = new AutoResetEvent(false);
public void SendMessage()
{
MessageSender ms = new MessageSender();
ms.MessageSent += new EventHandler<MessageSentEventArgs>(MessageHandler_MessageSent);
Thread t = new Thread(ms.Send());
t.Start();
MessageHasSent.WaitOne();
//Do some check here
//Same again but for "Message recieved"
}
void MessageHandler_MessageSent(object sender, MessageSentEventArgs e)
{
if (e.Errors.Count != 0)
{
//What can I do here to return to the next step after waitone?
}
else
MessageHasSent.Set();
}
}
public class MessageSender
{
public event EventHandler<MessageSentEventArgs> MessageSent;
public void Send()
{
//Do some method which could potentiallialy return a List<Error>
MessageSent(this, new MessageSentEventArgs() { Errors = new List<Error>() });
}
}
public class Error { }
public class MessageSentEventArgs : EventArgs
{
public List<Error> Errors;
}
基本的に、イベントが発生するSend
とコードから続行されますが、イベントの何らかの方法でフィードバックを提供し、場合によってはを使用する必要がありMessageHasSent
ます。私はさまざまな方法を試しましたが、Close
代わりに呼び出すとSet
、おそらく。などの何かにアクセスできるようになると思いましIsClosed
た。イベントの範囲外のフラグを設定して確認することもできますがthrow an exception
、これは汚れているように感じます。
助言がありますか?
.NET 3.5を使用してTPL
いるため、私の場合は使用できません。