等到调用委托

Ily*_*gan 3 c# asynchronous task begininvoke

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

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

  1. 调用StartProcessing()

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

  3. 返回结果

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

Jon*_*eet 5

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

像这样的东西:

var async = new AsyncClass();
var manualEvent = new ManualResetEvent();
async.ResultReady += args => manualEvent.Set();
async.StartProcessing();
manualEvent.WaitOne();
Run Code Online (Sandbox Code Playgroud)