简单来说,我想做的是通过在单独的线程上启动一个进程来做我需要做的事情并等待一个事件被提出来说“我已经完成了我需要做的事情”来处理“做某事”做”。尽管如此,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
或在事件范围之外设置一个标志来检查,但我觉得这很脏。
有什么建议么?
TPL
由于我使用的是 .NET 3.5,因此在我的情况下不适用。