C# 2.0 为了线程安全,不充许子线程直接访问窗体中的控件
如果在子线程中直接访问说窗体控件,编译器会提示,控件不是
由该线程创建的.

那么在子线程中如何访问窗体中的控件呢?
在窗体的构造函数中加入这一句pdf
Control.CheckForIllegalCrossThreadCalls = false;
子线程就可以直接访问窗体中的控件了,不过这样线程是非安全的.
而默认Control.CheckForIllegalCrossThreadCalls=true;(捕获线程错误调用)
这时可以用Invoke

如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace Project2
{

public partial class Form1 : Form
    {
        private BackgroundWorker backgroundWorker1;

protected delegate void UpdateControlText(string strText);//定义一个委托
        //定义更新控件的方法
        protected void updateControlText(string strText)
        {
           this.label1.Text  = strText ;
            return;
        }

public Form1()
        {
            //Control.CheckForIllegalCrossThreadCalls = false;

InitializeComponent();
        }

private void button1_Click(object sender, EventArgs e)
        {
            Thread ff = new Thread( new ThreadStart ( x2));
            ff.Start();
        }

private void x1()//线程安全的访问窗体控件
        {
            for (int i = 0; i < 1000; i++)
            {
                long xx = Convert.ToInt32(this.label1.Text);
                if (this.InvokeRequired)
                {
                    UpdateControlText update = new UpdateControlText(updateControlText);//用更新控件的方法updateControlText实例化一个委托update
                    this.Invoke(update, Convert.ToString(++xx));//调用窗体Invoke方法

}
                else
                {
                    this.label1.Text = Convert.ToString(++xx);
                }
            }
        }

}

}

转载于:https://www.cnblogs.com/ph580/archive/2011/07/20/2112161.html

C#多线程窗体控件安全访问实现方法相关推荐

  1. 使用 .NET 框架轻松开发完美的 Web 窗体控件

    作者:David S. Platt   出自:微软 本文假定您熟悉 Visual Basic .NET.C# 和 HTML 下载本文的代码: WebC.exe (274KB) 摘要 预建的自定义控件可 ...

  2. 如何在多线程中调用winform窗体控件2——实例篇

    如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...

  3. c# vs2005 多线程中调用窗体控件 (摘)

    Vs 2003用多了,装了VS 2005就有点用不习惯了,以前在2003里面不会因为在线程里面对其它线程中的控件进行操作而报错,到了2005这个就变成一个异常了,不过这也是为了线程之间的安全性,所以只 ...

  4. QT-子线程或自定义类操作访问主界面UI控件的几种方法

    前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...

  5. COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)

    声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...

  6. 主要的窗体控件的概述

    控件是包含在窗体上的对象,是构成用户界面的基本元素.控件也是设计Windows窗体引用程序的重要工具,使用控件可以减少程序设计中大量重复性的工作,有效的提高设计效率.控件通常是用来完成特定的输入输出功 ...

  7. 【引用】窗口处理技巧大全 vb(窗体控件)

    Vb提供了API函数SetWindowLong和GetWindowLong,可以让我们很容易取得对窗口的操作:通过对窗口属性的操作,可以更改窗口的显示风格.有些看来是正常情况下无法实现的窗口,现在你可 ...

  8. winform窗体控件

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

  9. Winform下ToolStrip承载自定义控件或 Windows 窗体控件。

     如题,使用ToolStripControlHost. 先看MSDN上介绍的: ToolStripControlHost  是 ToolStripComboBox.ToolStripTextBox ...

最新文章

  1. python+HDF5+h5py
  2. 水晶报表左侧树不显示属性设置
  3. java json转换
  4. Windows 下使用 SNMP 来管理网络
  5. MySql cmd下的学习笔记 —— 有关select的操作(max, min等常见函数)
  6. dnf一天能获得多少黑暗之眼_DNF:千万金币远古遗愿成废铁,95版本完美传说换装武器只需1个月...
  7. LeetCode 280. 摆动排序
  8. MySQL48道经典基础面试题(包含各个方面)
  9. java获取数据库列的别名_java – JDBC ResultSet获取具有表别名的列
  10. 苹果ios签名系统源码|ios免签封装
  11. 用户体验优化事半功倍:如何绘制客户行为轨迹图
  12. 我所能做的,就是真实地记录 | 小别手记
  13. Allegro如何设置走线自动删除重复走线操作指导
  14. mysql5.7出现:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)问题解决
  15. 什么是链接,为什么需要链接?
  16. python中readlines是什么意思_Python中read,readline,readlines三种方式的区别
  17. proc_mkdir与proc_create
  18. 今天感受了一下ipad
  19. centos7使用dnsmasq搭建dns服务器
  20. 操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)

热门文章

  1. Android PopupWindow系列 (一) —— popupWindow基本使用方略
  2. 礼物gift(DP)
  3. 51nod 1631 小鲨鱼在51nod小学
  4. java面对对象 关键字this super
  5. apache将请求转发到到tomcat应用
  6. .net 特性 Attribute
  7. SSH连接慢与反向解析(转)
  8. 手把手教你如何在安卓平台上实现打电话发短信的功能
  9. 5月份美网络游戏用户达8700万 同比增长22%
  10. 如何在hexo中支持Mathjax