主线程在调用一个异步的操作时,需要这个异步操作进入某个特定状态,主线程才可以继续往下执行。
(此时,并不是指这个异步操作执行完毕,因为再异步操作时会调用回调函数,不停给主线程返回数据。)
此时,可用如下操作:
1 | ManualResetEvent operationCompletionEvent = new ManualResetEvent(false); |
2 | EventHandler<OperationStateEventArgs> OnOperationStateChange = new EventHandler<OperationStateEventArgs>(delegate(object obj, OperationStateEventArgs args) |
4 | if (args.OperationStateInfo.State == OperationState.Stopped) |
5 | operationCompletionEvent.Set(); |
7 | operation.StateChanged += OnOperationStateChange; |
然后,调用该异步操作后,加一句 operationCompletionEvent.WaitOne();
"ManualResetEvent"是多线程时常用的事件操作。