我正在移植一个.Net库,它大量使用Asynchronous Programming Model(APM)到Windows商店应用程序库。
我想保持方法定义相同,因此使用该库的其他代码将与Windows商店应用版本一起使用。 (即我喜欢它,没有异步等待模式)。
问题是虽然Windows商店应用似乎与APM兼容,但缺少具体的AsyncResult类。因此,无法获得在回调中调用BeginInvoke()
的委托实例并调用EndInvoke()
:
public MyObject EndDoSomething (IAsyncResult result)
{
// Retrieve the delegate.
AsyncResult asyncResult = (AsyncResult)result; // Not possible in Windows store app - no AsyncResult
// Wait for the WaitHandle to become signaled.
result.AsyncWaitHandle.WaitOne();
// Call EndInvoke to retrieve the results.
MyObject rv = ((MyAsynchronousDelegate)asyncResult.AsyncDelegate).EndInvoke(result);
// Close the wait handel
result.AsyncWaitHandle.Close() // Close() is also missing
return rv;
}
那么该做什么呢?