此代码未显示DisplayAlert
public MainPage()
{
InitializeComponent();
DisplayAlert("Hey", "Welcome", "OK");
}
但是当我使用Device.BeginInvokeOnMainThread
时会显示警报
public MainPage()
{
InitializeComponent();
Device.BeginInvokeOnMainThread(() => {
DisplayAlert("Hey ", "Welcome", "OK");
});
}
这仅发生在DisplayAlert
还是其他控件中。谁能告诉我为什么会这样吗?
答案 0 :(得分:4)
调用构造函数的原因很简单,原因是它与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上可见。
我希望这对您有意义,
如果您不了解任何内容,请随时恢复。
祝你好运
答案 1 :(得分:2)
UI操作必须在主UI线程上发生。 BeginInvokeOnMainThread
强制对UI线程进行后台线程操作