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

  • 相关阅读:
    TypeError: Buffer.alloc is not a function
    node.js服务端程序在Linux上持久运行
    C#中的反射
    群要事日记
    vs2017 自定义生成规则 错误 MSB3721 命令 ”已退出,返回代码为 1。
    VP9 Video Codec
    用户手册是Yasm汇编
    更改Mysql数据库存储位置
    注册表项
    C#开发可以可视化操作的windows服务
  • 原文地址:https://www.cnblogs.com/zzh1236/p/3461491.html
Copyright © 2011-2022 走看看