zoukankan      html  css  js  c++  java
  • 多线程访问winform控件出现异常的解决方法

    一.  多线程访问winform控件出现异常的解决方法

    1.  问题描述
    <1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationException异常。
    (1) 并提示消息:“从不是创建控件 control name 的线程访问它。” 

    <2> 默认情况下,winform控件只能由创建该控件的线程调用 。
    (1) 如果要在新的线程中调用该控件,则需要使用控件的invoke方法来进行。

    ************************************************************************************************

    2. 解决方法1:
    <1> 说明:非线程安全方式。
    (1) 代码放在构造函数中。

    <2> 设置Control类的静态属性CheckForIllegalCrossThreadCalls为false。
    (1) 形式:Control.CheckForIllegalCrossThreadCalls = false;

    ************************************************************************************************

    3. 解决方法2:
    <1> 说明:线程安全方式。

    <2> 定义委托:delegate void CrossThreadCallHandler( object[] datas );

    <3> 定义访问winform控件的方法:
    void SetControlValue( object[] datas )
    {
    //访问控件的代码
    }

    <4> 在新线程中调用winform控件
    if ( 控件ID.InvokeRequired )
    {
    控件ID.Invoke( new CrossThreadCallHandler( SetControlValue ) , new object[] { 值1,值2 } );
                    
    }
    else
    {
    //访问控件的代码
    }

  • 相关阅读:
    初学JavaScript.一
    初学CSS.二
    初学CSS.一
    初学HTML.二
    初学HTML
    学习Javascript的第二天
    学习javascript的一天
    css02
    记录学习css的一天
    记录入门html第一天0
  • 原文地址:https://www.cnblogs.com/zzh1236/p/3461491.html
Copyright © 2011-2022 走看看