有沒有辦法使用async/await來做到這一點。由於異步方法的工作方式,在異步方法中使用ref/out將毫無意義。
您沒有指定myMethod
的簽名,所以下面的示例假定您需要異步方法的返回值。如果您不需要等待該方法完成,則可以將其稱爲正常方法:myMethod(foo)
。請注意,在myMethod
中引發的任何異常都將被忽略。
解決方法是手動輸入.ContinueWith。因爲這需要使用lambda(或單獨的方法),所以在此調用之後,您將無法設置ref參數。
private void instance_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel)
{
myMethod(foo).ContinueWith(t => {
var resultOfMethod = t.Result;
// Do something with resultOfMethod
});
}
您可以將它們放置在一個變量第一
private void instance_NavigateError(object pDisp, ref object URLref, ref object Frame, ref object StatusCode, ref bool Cancel)
{
var URL = URLref;
myMethod(foo).ContinueWith(t => {
var resultOfMethod = t.Result;
// Do something with resultOfMethod and URL
});
}
你的問題閱讀裁判的參數是:「我需要做的事情是不可能的,我該怎麼辦呢?」你沒有。要麼你不需要*等待,或者你不需要*擁有參考。如果你同時需要,那麼你需要*學習如何忍受不滿足你需求的失望。 –
是否有你使用ActiveX組件而不是[Winforms]的原因(https://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser(v = vs.110).aspx )或[WPF](https://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser(v = vs.110).aspx)組件? –
@EricLippert:我正在尋找解決方法,如果有的話。如果我確信這是不可能的,我不會問,因爲我很愚蠢。 – Jack