首页 > 解决方案 > 为什么我们需要在应用加载时使用 BeginInvokeOnMainThread 来显示 DisplayAlert

问题描述

此代码未显示DisplayAlert

public MainPage()
{
    InitializeComponent();
    DisplayAlert("Hey", "Welcome", "OK");
}

但是当我使用Device.BeginInvokeOnMainThread警报时会显示

public MainPage()
{
    InitializeComponent();
    Device.BeginInvokeOnMainThread(() => {
                DisplayAlert("Hey ", "Welcome", "OK");
            });
}

这是DisplayAlert仅发生在还是与其他控件一起发生。谁能告诉我为什么会这样?

标签: c#xamarinxamarin.formsxamarin.androidxamarin.ios

解决方案


原因很简单,当调用构造函数时,它位于与 不同的线程上UIThread,现在 UI 线程是 UI 上所有更改实际发生的地方。

笔记

一个应用程序可以有 n 个不同的线程,但只有一个 UIThread

所以当你这样做时:

public MainPage()
{
   InitializeComponent();
   DisplayAlert("Hey", "Welcome", "OK");
}

发生的情况是它在构造函数的线程(不是 UIThread)上运行,因此它被执行但从未在 UI 上显示,相反,当你这样做时:

public MainPage()
{
   InitializeComponent();
   Device.BeginInvokeOnMainThread(() => {
            DisplayAlert("Hey ", "Welcome", "OK");
        });
}

BeginInvokeOnMainThread 方法强制您的显示警报方法在 UI 线程上运行,使其在 UIThread 上可见。

我希望它对你有意义,

如果您不了解任何内容,请随时回复。

祝你好运


推荐阅读