为什么我们需要在app加载时使用BeginInvokeOnMainThread来显示DisplayAlert

问题描述 投票:2回答:2

此代码未显示DisplayAlert

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

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

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

这是仅在DisplayAlert或其他控件中发生的。谁能告诉我为什么会这样?

c# xamarin xamarin.forms xamarin.android xamarin.ios
2个回答
4
投票

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

注意

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

所以当你这样做时:

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

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

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

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

我希望你有意义,

如果你什么都不懂,请随意回复。

祝好运


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.