C# 为什么我们需要在应用程序加载中使用BeginInvokeMainThread来显示DisplayAlert

C# 为什么我们需要在应用程序加载中使用BeginInvokeMainThread来显示DisplayAlert,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,此代码未显示DisplayAlert public MainPage() { InitializeComponent(); DisplayAlert("Hey", "Welcome", "OK"); } 但是当我使用Device.beginInvokeMainThread时,会显示警报 public MainPage() { InitializeComponent(); Device.BeginInvokeOnMainThread(() => {

此代码未显示
DisplayAlert

public MainPage()
{
    InitializeComponent();
    DisplayAlert("Hey", "Welcome", "OK");
}
但是当我使用
Device.beginInvokeMainThread
时,会显示警报

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

这是仅在
DisplayAlert
中发生还是在其他控件中也发生。有人能告诉我为什么会发生这种情况吗?

UI操作必须在主UI线程上进行
BeginInvokeOnMainThread
强制在UI线程上执行后台线程上的操作

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

注意

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

所以当你这样做的时候:

public MainPage()
{
   InitializeComponent();
   DisplayAlert("Hey", "Welcome", "OK");
}
public MainPage()
{
   InitializeComponent();
   Device.BeginInvokeOnMainThread(() => {
            DisplayAlert("Hey ", "Welcome", "OK");
        });
}
发生的情况是,它在构造函数的线程(不是UIThread)上运行,因此它被执行但从未在UI上显示,相反,当您执行此操作时:

public MainPage()
{
   InitializeComponent();
   DisplayAlert("Hey", "Welcome", "OK");
}
public MainPage()
{
   InitializeComponent();
   Device.BeginInvokeOnMainThread(() => {
            DisplayAlert("Hey ", "Welcome", "OK");
        });
}
BeginInvokeOnMainThread方法强制在UI线程上运行display alert方法,使其在UIThread上可见

我希望这对你有意义

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


祝你好运,谢谢。
beginInvokeMainThread
MainUIThread是吗?线程和UIThread不同吗?一个应用程序可以有许多线程,但只有一个UI线程。是的,
BeginInvokeOnMainThread
相当于iOS的
InvokeOnMainThread
和Android的
RunOnUIThread