无法在未调用Looper.prepare()[xamarin]

时间:2015-11-02 18:24:06

标签: xamarin xamarin.forms

所以我实际上没有问题,因为我已经解决了这个问题,但是如果其他人遇到这个问题,那么拥有一个简洁的解决方案总是很好的。

虽然有"Can't create handler inside thread which has not called Looper.prepare()"的问题,但是没有用xamarin标记的问题。 (所以他们都是java,我有0个匹配“无法在线程中创建处理程序,而没有调用Looper.prepare()[xamarin]”)

2 个答案:

答案 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
}