zoukankan      html  css  js  c++  java
  • 线程的一些感悟

    背景:通过一个辅助线程计算出的一个值赋给textBox1.text;

    1.

    当点击一个button事件 去触发一个while(1)的循环事件时,如果不用线程去操作 界面就会卡死

    解决方法:需要加入线程。

    2

    然后发现在线程中去操作一个控件的显示(比如 textBox1.text=“”;)时会产生如下error:线程间操作无效: 从不是创建控件“textBox1”的线程访问它。

    解决方法:1直接在窗体的构造函数中加:System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 此时把所有的控件合法性线程检查全部都给禁止掉了。但是发现效果不是非常好。关闭exe时反应有点慢。

                 2通过代理委托解决private delegate void SetTextCallback(string text);
    //在给textBox1.text赋值的地方调用以下方法即可
    private void SetText(string text)
    {
        // InvokeRequired需要比较调用线程ID和创建线程ID
        // 如果它们不相同则返回true
        if (this.textBox1.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(SetText);
            this.Invoke(d, new object[] { text });   //当参数类型和个数都不确定的情况下,用object数组可以解决这个问题。
        }
        else
        {
            this.textBox1.Text = text;
        }
    }

    通过委托的方法效果好。

    3

    关闭调试程序时,报错:在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。

    解决方法:    加上Sgather.IsBackground = true;Sgather是点击事件时的线程。

     4.

    Invoke和BeginInvoke的区别是什么????为什么有的地方要用Invoke才可以,BeginInvoke不能用??

    Invoke是同步的,BeginInvoke异步。

  • 相关阅读:
    iframe跨域
    jquery 中的 $(“#”) 与 js中的document.getElementById(“”) 的区别
    jQuery中this与$(this)的区别
    div层调整zindex属性无效原因分析及解决方法
    The local variable......been initialized
    equals方法的重写
    eclipse快捷键
    JAVA中几个常用的方法
    Java基础4(方法基础和一维数组)
    Java基础3笔记
  • 原文地址:https://www.cnblogs.com/zhayunjia/p/3807792.html
Copyright © 2011-2022 走看看