【发布时间】:2009-08-24 09:40:31
【问题描述】:
我有一个关于 C# 事件处理的问题。我听 A 类抛出的事件。现在,当事件被抛出时,会执行一个执行某些操作的方法。此方法有时必须等待来自数据源或类似的响应。
我认为事件处理是同步的,所以会处理一个接一个的事件。是否有可能使这个异步?我的意思是当方法执行但必须等待数据源的响应时,可以处理另一个事件?
提前致谢
塞巴斯蒂安
【问题讨论】:
标签: .net multithreading events event-handling
我有一个关于 C# 事件处理的问题。我听 A 类抛出的事件。现在,当事件被抛出时,会执行一个执行某些操作的方法。此方法有时必须等待来自数据源或类似的响应。
我认为事件处理是同步的,所以会处理一个接一个的事件。是否有可能使这个异步?我的意思是当方法执行但必须等待数据源的响应时,可以处理另一个事件?
提前致谢
塞巴斯蒂安
【问题讨论】:
标签: .net multithreading events event-handling
我假设您可以生成需要在新线程中等待的代码。这将导致事件处理程序不会阻塞引发事件的线程,以便它可以调用行中的下一个事件处理程序。 (C# 3.5 示例)
private void MyPotentiallyLongRunningEventHandler(object sender, SomeEventArgs e)
{
ThreadPool.QueueUserWorkItem((state) => {
// do something that potentially takes time
// do something to update state somewhere with the new data
});
}
【讨论】:
很简单,在您的事件处理程序中创建一个线程并在那里执行所有逻辑。最好使用线程池,这样线程数是有限的。
【讨论】: