• 跨线程的安全更新控件


    在你的工程中的扩展方法类中写下一个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);
                    }
                });
            }
     
        }
    }
  • 相关阅读:
    centos6.5的开机自动部署出现unsupported hardware detected
    Nginx的安装
    sshpass的使用方法
    dhcp 的安装和配置文件
    SMBus总线概述
    SMBus与I2C的差别
    vim搭建笔记
    pcie dma的玩法
    Virtex6 PCIe 超简版基础概念学习(二)
    揭开Altera公司支持OpenCL的设计工具的神秘面纱
  • 原文地址:https://www.cnblogs.com/51net/p/3994538.html
Copyright © 2020-2023  润新知