• 多线程访问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
    {
    //访问控件的代码
    }

  • 相关阅读:
    Android之基于XMPP即时通讯(转)
    开机启动service小DEMO
    Android 歌词同步滚动效果(转)
    OC中的消息传递和初始化
    oc中对象的初始化
    c语言的结构体字节数统计
    css的页面布局
    说一说我理解的css
    什么是js闭包
    我对js作用域的理解
  • 原文地址:https://www.cnblogs.com/zzh1236/p/3461491.html
Copyright © 2020-2023  润新知