我有一个带有异步方法的第 3 方 DLL,我想用另一个等待其结果的方法包装它。
我开始编写一个类来隐藏功能,但现在我不知道如何Doc.Completed
在this.version.DownloadFile(this)
.Doc.Download
DLL 调用InitTransfer
,然后OnProgressNotify
多次,然后Completed
. OnError
可以在任何阶段调用,但Completed
总是最后调用。我不在乎InitTransfer
,OnProgressNotify
或者OnError
。
我已经阅读 了同步方法中的异步调用和将异步调用转换为同步,但我不明白如何将答案应用于这种情况。
我正在使用 C# 4。
public class Doc : SomeInterfaceFromTheDll
{
private readonly IVersion version; // An interface from the DLL.
private bool downloadSuccessful;
public Doc(IVersion version)
{
this.version = version;
}
public bool Download()
{
this.version.DownloadFile(this);
return ??? // I want to return this.downloadSuccessful after Completed() runs.
}
public void Completed(short reason)
{
Trace.WriteLine(string.Format("Notify.Completed({0})", reason));
this.downloadSuccessful = reason == 0 ? true : false;
}
public void InitTransfer(int totalSize)
{
Trace.WriteLine(string.Format("Notify.InitTransfer({0})", totalSize));
}
public void OnError(string errorText)
{
Trace.WriteLine(string.Format("Notify.OnError({0})", errorText));
}
public void OnProgressNotify(int bytesRead)
{
Trace.WriteLine(string.Format("Notify.OnProgressNotify({0})", bytesRead));
}
}