我有一个带有StartProcessing()
方法的异步类,它在完成处理时会引发int ResultReady()
事件。 StartProcessing()
只需要很少的时间。
我想同步调用这个类。我的伪代码应该是这样的:
调用StartProcessing()
等待/睡眠直到结果准备好
返回结果
最适合的设计模式是什么?你能指点一个代码示例吗?
答案 0 :(得分:5)
执行此操作的一种简单方法是使用事件处理程序和等待代码都可以访问的ManualResetEvent
。从事件处理程序调用{{3}},并从等待的线程调用Set
(或带有超时的重载)。请注意,这不能在STA线程上完成,因此您无法在WinForms线程(应始终为STA)中执行此操作 - 但您不应该在UI线程中等待。
这样的事情:
var async = new AsyncClass();
var manualEvent = new ManualResetEvent();
async.ResultReady += args => manualEvent.Set();
async.StartProcessing();
manualEvent.WaitOne();