C#多线程窗体控件安全访问实现方法
C# 2.0 为了线程安全,不充许子线程直接访问窗体中的控件
如果在子线程中直接访问说窗体控件,编译器会提示,控件不是
由该线程创建的.
那么在子线程中如何访问窗体中的控件呢?
在窗体的构造函数中加入这一句pdf
Control.CheckForIllegalCrossThreadCalls = false;
子线程就可以直接访问窗体中的控件了,不过这样线程是非安全的.
而默认Control.CheckForIllegalCrossThreadCalls=true;(捕获线程错误调用)
这时可以用Invoke
如下:
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#多线程窗体控件安全访问实现方法相关推荐
- 使用 .NET 框架轻松开发完美的 Web 窗体控件
作者:David S. Platt 出自:微软 本文假定您熟悉 Visual Basic .NET.C# 和 HTML 下载本文的代码: WebC.exe (274KB) 摘要 预建的自定义控件可 ...
- 如何在多线程中调用winform窗体控件2——实例篇
如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...
- c# vs2005 多线程中调用窗体控件 (摘)
Vs 2003用多了,装了VS 2005就有点用不习惯了,以前在2003里面不会因为在线程里面对其它线程中的控件进行操作而报错,到了2005这个就变成一个异常了,不过这也是为了线程之间的安全性,所以只 ...
- QT-子线程或自定义类操作访问主界面UI控件的几种方法
前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...
- COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...
- 主要的窗体控件的概述
控件是包含在窗体上的对象,是构成用户界面的基本元素.控件也是设计Windows窗体引用程序的重要工具,使用控件可以减少程序设计中大量重复性的工作,有效的提高设计效率.控件通常是用来完成特定的输入输出功 ...
- 【引用】窗口处理技巧大全 vb(窗体控件)
Vb提供了API函数SetWindowLong和GetWindowLong,可以让我们很容易取得对窗口的操作:通过对窗口属性的操作,可以更改窗口的显示风格.有些看来是正常情况下无法实现的窗口,现在你可 ...
- winform窗体控件
目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...
- Winform下ToolStrip承载自定义控件或 Windows 窗体控件。
如题,使用ToolStripControlHost. 先看MSDN上介绍的: ToolStripControlHost 是 ToolStripComboBox.ToolStripTextBox ...
最新文章
- python+HDF5+h5py
- 水晶报表左侧树不显示属性设置
- java json转换
- Windows 下使用 SNMP 来管理网络
- MySql cmd下的学习笔记 —— 有关select的操作(max, min等常见函数)
- dnf一天能获得多少黑暗之眼_DNF:千万金币远古遗愿成废铁,95版本完美传说换装武器只需1个月...
- LeetCode 280. 摆动排序
- MySQL48道经典基础面试题(包含各个方面)
- java获取数据库列的别名_java – JDBC ResultSet获取具有表别名的列
- 苹果ios签名系统源码|ios免签封装
- 用户体验优化事半功倍:如何绘制客户行为轨迹图
- 我所能做的,就是真实地记录 | 小别手记
- Allegro如何设置走线自动删除重复走线操作指导
- mysql5.7出现:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)问题解决
- 什么是链接,为什么需要链接?
- python中readlines是什么意思_Python中read,readline,readlines三种方式的区别
- proc_mkdir与proc_create
- 今天感受了一下ipad
- centos7使用dnsmasq搭建dns服务器
- 操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)