博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分享一个跨线程访问控件的很实用的方法
阅读量:5281 次
发布时间:2019-06-14

本文共 1445 字,大约阅读时间需要 4 分钟。

看CefSharp的时候好像发现一个很好用用来跨线程访问控件的方法。在这个异步编程的时代,应该还是很好用的。

代码:

///     /// Executes the Action asynchronously on the UI thread, does not block execution on the calling thread.    ///     /// the control for which the update is required    /// action to be performed on the control    public static void InvokeOnUiThreadIfRequired(this Control control, Action action)        {            if (control.InvokeRequired)            {                control.BeginInvoke(action);            }            else            {                action.Invoke();            }        }

上面的这个方法有时候也有点问题。因为它是不阻塞方法的调用方的,当我们希望通过UI操作来决定调用方下一步执行方向的的话,这个方法就不能使用了。可以将是否阻塞调用方作为参数传入。

修改代码:

public static void InvokeOnUiThreadIfRequired(this Control control, Action action, bool isBlock = false)        {            if (control.InvokeRequired)            {                if (isBlock)                    control.Invoke(action);                else                    control.BeginInvoke(action);            }            else            {                action.Invoke();            }        }

 

使用:

this.InvokeOnUiThreadIfRequired(() =>                {                    //控件访问                    this.Text = "changed";                });

 

 

或者

         this.InvokeOnUiThreadIfRequired(() =>                {                    //控件访问                    this.Text = "changed";                },true);//阻塞调用线程,未测试

 

That‘s all.

转载于:https://www.cnblogs.com/jianIsTheBest/p/10604641.html

你可能感兴趣的文章
bzoj 2257 (JSOI 2009) 瓶子与燃料
查看>>
11)Java abstract class 和 interface
查看>>
使用xrdp或Xmanager 远程连接 CentOS6
查看>>
Linux误删恢复
查看>>
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>