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;
                }));
                */
     
            }    
     }
  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/Rannie/p/3979043.html
Copyright © 2011-2022 走看看