我是xamarin.forms的新手,但是当我尝试在xamarin.Forms中使用Task.Run时,出现以下错误:
System.Reflection.TargetInvocationException:'调用的目标引发了异常
到目前为止我的代码:
await Task.Run(async () =>
{
await DoWork();
});
我尝试过:
await Task.Run(async () =>
{
await DisplayAlert("hi","hi","hi");
});
但还是相同的错误
答案 0 :(得分:1)
跑步时
await Task.Run(async() =>
{
Device.BeginInvokeOnMainThread(async () =>
{
// Not blocking main thread since it is still asynchronously called!!!
await DisplayAlert("hi", $"", "hi");
});
});
错误消息显示:
无法在尚未调用Looper.prepare()的线程内创建处理程序。
您不能从不是主线程的线程启动DisplayAlert!这就是为什么您必须打电话给
await Task.Run(async() =>
{
Device.BeginInvokeOnMainThread(async () =>
{
await DisplayAlert("hi", $"", "hi"); // Now launched from main thread!!!
});
});
或者简单地
await DisplayAlert("hi", $"", "hi"); // launched anyway from main thread.
在更一般的情况下,您要避免的是从不是主线程的线程中修改UI,因此,如果在“您的”异步方法中修改UI,则必须从线程中进行操作。通过调用主线程
public async void DoWork()
{
await DoHeaviWorkAsync();
Device.BeginInvokeOnMainThread(() =>
{
// Make changes to UI
});
}