multithreading - Device.BeginInvokeOnMainThread的作用是什么?

标签 multithreading xamarin xamarin.forms

我希望有人向我解释什么是Device.BeginInvokeOnMainThread,它的作用是什么?

还有一些使用它的情况的例子。

最佳答案

仅举一个例子。

假设您有一个异步方法DoAnyWorkAsync,如果您以这种方式调用它(仅作为示例):

 DoAnyWorkAsync().ContinueWith ((arg) => {
                StatusLabel.Text = "Async operation completed...";
            });
StatusLabel是XAML中的标签。

异步操作完成后,上面的代码将不会在标签中显示消息,因为回调位于与UI线程不同的另一个线程中,因此该回调无法修改UI。

如果您更新了相同的代码,只需将StatusLabel文本更新包含在Device.BeginInvokeOnMainThread中,如下所示:
 DoAnyWorkAsync().ContinueWith ((arg) => {
     Device.BeginInvokeOnMainThread (() => {
                StatusLabel.Text = "Async operation completed...";
           });
     });

不会有任何问题。

自己尝试,将DoAnyWorkAsync()替换为Task.Delay(2000)

关于multithreading - Device.BeginInvokeOnMainThread的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121760/

相关文章:

c++ - 类的std::thread调用方法

multithreading - 我怎样才能拥有一个所有进程都可以访问的 map ?

java - 探索 Java 中的线程

ios - 超过 Apple Watch 应用大小限制

xamarin - 带有自定义标签菜单的底部标签栏

java - java中的不正确同步

c# - 在 NSScrollView 中检测滚动事件

c# - 'SQLite.SQLiteConnection' 的类型初始值设定项引发异常

xamarin - 启动 Activity 在 Android 13 中不起作用

c# - 无法访问派生类中的基属性 (C#)