首页 > 代码库 > 跨线程的安全更新控件
跨线程的安全更新控件
在你的工程中的扩展方法类中写下一个SafeCall方法:using System;using System.Windows.Forms; namespace WindowsFormsApplication1{ public static class Extensions { public static void SafeCall(this Control ctrl, Action callback) { if (ctrl.InvokeRequired) ctrl.Invoke(callback); else callback(); } }}它只是把你要保护起来的代码作为一个回调而已。然后任何需要保护一些代码的地方都可以这样调用:using System;using System.Threading;using System.Windows.Forms; namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(h => { for (var i = 0; i < 10000000; i++) { label1.SafeCall(() => { label1.Text = i.ToString(); }); Thread.Sleep(100); } }); } }}
当然,使用lamda是我的一个“坏毛病”。其实这里完全可以使用传统的匿名委托写法:using System;using System.Threading;using System.Windows.Forms; namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(h => { for (var i = 0; i < 10000000; i++) { label1.SafeCall(delegate() { label1.Text = i.ToString(); }); Thread.Sleep(100); } }); } }}
跨线程的安全更新控件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。