我有一些C#代碼正在做異步調用並拉回數據集。我這樣做是爲了讓Windows桌面用戶界面在檢索時不掛起/凍結。我現在需要在vb.net中做同樣的事情,但通過在線代碼轉換器後,它給了我錯誤。異步線程是不正確使用C#代碼轉換器VB到VB
委託'Func(Of String,Boolean,DataSet)'需要'AddressOf'表達式或lambda表達式作爲其構造函數的唯一參數。
這是轉換前後的代碼。
前:
var DataFunc = new Func<string, string, DataSet> (getData);
IAsyncResult Result = DataFunc.BeginInvoke(barCodeResult, orderType, null, null);
DataSet ds = DataFunc.EndInvoke(Result);
後:
Dim DataFunc As var = New Func(Of String, String, DataSet)(getData)
Dim Result As IAsyncResult = DataFunc.BeginInvoke(barCodeResult, orderType, Nothing, Nothing)
Dim ds As DataSet = mtrDataFunc.EndInvoke(Result)
非常感謝你提前爲您的見解。
你應該明白的語言,而不是使用轉換器。幾乎所有的.NET代碼都是用C#編寫的。原來的C#代碼*不是*很好。我懷疑它是從一個非常古老的項目中複製而來的。你可以用'var result = await Task.Run((=)getData(barCodeResult,orderType));'替換它。在VB.NET中的等價物是'Dim result = Await Task.Run(Function()getData(barCodeResult,orderType))' –
getData是做什麼的?如果函數阻塞等待數據庫響應,則在後臺運行任何內容都沒有意義。 ADO.NET本身支持異步操作。例如,'SqlCommand.ExecuteReaderAsync'可用於異步返回讀者 –
如果我的答案解決了您的問題,請按下我的文章左側的勾號/複選標記將其標記爲「已接受」。欲瞭解更多信息,請參閱:[**如何接受答案的工作**](https://meta.stackexchange.com/a/5235) –