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