zoukankan      html  css  js  c++  java
  • 线程间操作无效: 从不是创建控件的线程访问它

    public partial class Form1 : Form
        {
            private delegate void DelegateSetText(string text);
            private void SetText(string text)
            {
                if (this.txtMessage.InvokeRequired)
                {
                    Invoke(new DelegateSetText(SetText), text);
                }
                else
                {
                    this.txtMessage.Text += text;
                }
     
            }
     
            public Form1()
            {
                InitializeComponent();
                //Control.CheckForIllegalCrossThreadCalls = false;
            }
     
            private void btnTest_Click(object sender, EventArgs e)
            {
                var t = Task.Factory.StartNew(() =>
                {
                    Do();
                });
     
            }
         private void Do()
            {
                btnTest.Invoke(new MethodInvoker(delegate() { btnTest.Enabled = false; }));
                txtMessage.Invoke(new MethodInvoker(delegate() { txtMessage.Text = ""; }));
     
                //this.Invoke(new MethodInvoker(() => { btnTest.Enabled = false; }));
                //this.Invoke(new MethodInvoker(() => { txtMessage.Text = ""; }));
                int i = 0;
                while (i < 10)
                {
                    string str = DateTime.Now + ":" + i + "
    ";
                    // 简单代码直接写代理
                    txtMessage.Invoke(new MethodInvoker(delegate() { this.txtMessage.Text += str; }));
                    /////或者使用如下方法,显示声明代理
                    //SetText(str);
                    Thread.Sleep(1000);
                    i++;
                }
     
                btnTest.Invoke(new MethodInvoker(delegate() { btnTest.Enabled = true; }));
                //this.Invoke(new MethodInvoker(() => { btnTest.Enabled = true; }));
     
                /*
                 this.Invoke(new MethodInvoker(() =>
                {
                    btnTest.Enabled = false;
                    txtMessage.Text = "";
     
                    int i = 0;
                    while (i < 10)
                    {
                        string str = DateTime.Now + ":" + i + "
    ";
                        // 简单代码直接写代理
                        txtMessage.Invoke(new MethodInvoker(delegate() { this.txtMessage.Text += str; }));
                        /////或者使用如下方法,显示声明代理
                        //SetText(str);
                        Thread.Sleep(1000);
                        i++;
                    }
                    btnTest.Enabled = true;
                }));
                */
     
            }    
     }
  • 相关阅读:
    在Windows中,U盘或者移动硬盘关不掉时,怎么知道是被哪个程序占用了呢?
    选择的文件中包含不支持的格式
    FTO Obesity Variant Circuitry and Adipocyte Browning in Humans
    SNPsnap | 筛选最佳匹配的SNP | 富集分析 | CP loci
    PhastCons | 序列保守性打分
    hg19基因组 | 功能区域 | 位置提取
    投稿SCI杂志 | 如何撰写cover letter | 如何绘制illustrated abstract
    variant的过滤 | filtering and prioritizing genetic variants
    会议录音的处理 | 提高音量 + 降噪 + 自动添加字幕
    小型数据工作站 | 管理和维护 | Jupyter | Rstudio server | Mac & Win10
  • 原文地址:https://www.cnblogs.com/Rannie/p/3979043.html
Copyright © 2011-2022 走看看