我已经构建了一个Xamarin.Forms应用程序,它使用分层应用程序中的DLL来发送某种SQL命令(这不是SQL!(
问题是它只提供同步方法,而我的应用程序"没有响应"。如何在不挂起UI的情况下,创建一个异步方法来调用sycnronous方法并等待其结果?
我尝试了以下内容,但它似乎一直在等待,就像线程从未停止一样。
public async Task<ExecuteCommandResult> ExecuteMocaCommandAsync(String ps_command)
{
return await Task<ExecuteCommandResult>.Run(() =>
{
return ExecuteMocaCommand(ps_command);
}
);
}
我这样称呼它:
ExecuteCommandResult l_res = l_con.ExecuteMocaCommandAsync("list users where usr_id = '" + gs_UserName + "'").Result;
我显然错过了一些东西,希望你能给我指明一个好的方向。
谨致问候,Yoz
Task.Run
看起来不错(不过您可以通过将Task<ExecuteCommandResult>.Run
更改为仅Task.Run
来简化它(。这是将阻塞工作推送到UI应用程序的后台线程的正确方法。
但是,您不能使用Result
;这可能会陷入僵局。您需要使用await
:调用您的方法
ExecuteCommandResult l_res = await l_con.ExecuteMocaCommandAsync("list users where usr_id = '" + gs_UserName + "'");