4

我有一个带有方法的异步类,当它完成处理时StartProcessing()会引发一个事件。花费很少的时间。int ResultReady()StartProcessing()

我想同步调用这个类。我的伪代码应该是这样的:

  1. 调用 StartProcessing()

  2. 等待/睡眠,直到结果准备好

  3. 返回结果

什么设计模式最适合这个?你能指点我一个代码示例吗?

4

1 回答 1

6

一种简单的方法是使用ManualResetEvent事件处理程序和等待代码都可以访问的方法。Set从事件处理程序调用,和WaitOne(或具有超时的重载)从等待线程调用。请注意,这不能在 STA 线程上完成,因此您不能在 WinForms 线程(应该始终是 STA)中执行此操作 - 但无论如何您都不应该在 UI 线程中等待。

像这样的东西:

var async = new AsyncClass();
var manualEvent = new ManualResetEvent();
async.ResultReady += args => manualEvent.Set();
async.StartProcessing();
manualEvent.WaitOne();
于 2011-02-14T07:11:46.563 回答