所以我实际上没有问题,因为我已经解决了这个问题,但是如果其他人遇到这个问题,那么拥有一个简洁的解决方案总是很好的。
虽然有"Can't create handler inside thread which has not called Looper.prepare()"
的问题,但是没有用xamarin标记的问题。 (所以他们都是java,我有0个匹配“无法在线程中创建处理程序,而没有调用Looper.prepare()[xamarin]”)
答案 0 :(得分:8)
public static class PageExtensions
{
public static Task<bool> DisplayAlertOnUi(this Page source, string title, string message, string accept, string cancel)
{
TaskCompletionSource<bool> doneSource = new TaskCompletionSource<bool>();
Device.BeginInvokeOnMainThread(async () =>
{
try
{
var result = await source.DisplayAlert(title, message, accept, cancel);
doneSource.SetResult(result);
}
catch (Exception ex)
{
doneSource.SetException(ex);
}
});
return doneSource.Task;
}
}
最后,我有一个使用TaskCompletionSource解决问题的案例。
答案 1 :(得分:6)
生成该问题是因为您尝试从其他线程开始在UI上工作。如果要更改UI,必须从UI线程调用UI更改。
Xamarin Android:
activity.RunOnUiThread(() =>
{
// Write your code here
});
Xamarin IOS:
nsObject.BeginInvokeOnMainThread(() =>
{
// Write your code here
});
Xamarin表格:
Device.BeginInvokeOnMainThread(() =>
{
// Write your code here
}