c# - 为什么我们需要在应用加载时使用 BeginInvokeOnMainThread 来显示 DisplayAlert
问题描述
此代码未显示DisplayAlert
public MainPage()
{
InitializeComponent();
DisplayAlert("Hey", "Welcome", "OK");
}
但是当我使用Device.BeginInvokeOnMainThread
警报时会显示
public MainPage()
{
InitializeComponent();
Device.BeginInvokeOnMainThread(() => {
DisplayAlert("Hey ", "Welcome", "OK");
});
}
这是DisplayAlert
仅发生在还是与其他控件一起发生。谁能告诉我为什么会这样?
解决方案
原因很简单,当调用构造函数时,它位于与 不同的线程上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 上可见。
我希望它对你有意义,
如果您不了解任何内容,请随时回复。
祝你好运
推荐阅读
- html - 如何让边框正常工作html
- python - 如何在 python 中以递增/递减顺序更正列表的值
- c# - 当可以从用户对象中提取所需的属性时,像 GetPhoneNumberAsync(IdentityUser user) 这样的 UserManager 方法的目的是什么?
- c++ - 如何在参数包中使用类型?
- bash - $# 位置参数什么
- css - Toastr 服务不适用于 Internet Explorer
- json - 如何在 Rest Assured 的 Header 中传递 AccessToken 密钥
- spring-websocket - Spring Cloud Gateway 不路由基于 Web-socket 的请求
- bash - 复制bash中特殊字符组成的行数
- python - 为什么将''替换为''不替换?