最简单的方法(不推荐):

在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;

为什么不推荐上面的方法:

为避免空间造成死锁, .net framework 2.0 之后 拒绝多线程访问空间, 以前Control.CheckForIllegalCrossThreadCalls 默认就是flase, 2.0后默认为true。当然如果能保证程序中不会好几个线程同时操作一个控件用上面的方法也可以, 如果存在多个线程一起操作控件使用下面的方法; 下面是来自微软官网给出的示例:

三种处理方案见源码:

Form1.cs源码:

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms; namespace CrossThreadDemo
{
public partial class Form1 : Form
{
//设置这个委托支持异步调用文本框控件的文本属性。
delegate void SetTextCallback(string text);
//这个线程用于演示和线程安全的和不安全的方法来调用一个Windows窗体控件。
private Thread demoThread = null; //这个BackgroundWorker用于演示执行异步操作, 推荐使用该方法。
private BackgroundWorker backgroundWorker1; private TextBox textBox1;
private Button setTextUnsafeBtn;
private Button setTextSafeBtn;
private Button setTextBackgroundWorkerBtn; public Form1()
{
InitializeComponent();
} //这个事件处理程序创建一个线程,该线程演示用不安全的方式调用 Windows窗体, 在.net framework2.0后被禁用
private void setTextUnsafeBtn_Click(object sender,EventArgs e)
{
this.demoThread = new Thread(new ThreadStart(this.ThreadProcUnsafe));
this.demoThread.Start();
}   //这个方法执行工作线程, 文本框控件不安全的调用, 一执行就会报错.
private void ThreadProcUnsafe()
{
//线程间操作无效: 从不是创建控件“textBox1”的线程访问它。
this.textBox1.Text = "This text was set unsafely.";
}
    //这个事件处理程序创建一个线程,该线程使用安全的方式调用 Windows窗体.
private void setTextSafeBtn_Click(object sender,EventArgs e)
{
this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe));
this.demoThread.Start();
} //这个方法执行工作线程,使 文本框控件的线程安全的调用.
private void ThreadProcSafe()
{
this.SetText("This text was set safely.");
} //这个方法演示了线程通过安全的模式, 调用一个Windows窗体控件。如果调用线程和当前创建了文本框控件的线程不用,该方法创建一个SetTextCallback,并使用了异步调用自身调用方法,
    //如果调用线程创建的线程是一样的文本框控件,直接设置文本属性。
private void SetText(string text)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
//在此设置textBox1的文本
this.textBox1.Text = text;
}
} //这个事件处理程序通过调用RunWorkerAsync BackgroundWorker。设置文本框控件的文本属性, 用BackgroundWorker提高RunWorkerCompleted事件。
private void setTextBackgroundWorkerBtn_Click(object sender,EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
} //这个事件处理程序设置文本框的文本属性控制。它调用创建的线程文本框控件,所以调用是线程安全的,异步执行BackgroundWorker是首选方法操作.
private void backgroundWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
this.textBox1.Text ="This text was set safely by BackgroundWorker.";
}
}
}

Program.cs源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new CrossThreadDemo.Form1());
}
}
}

Form1.Designer.cs源码:

namespace CrossThreadDemo
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null; /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
} #region Windows 窗体设计器生成的代码 /// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.setTextUnsafeBtn = new System.Windows.Forms.Button();
this.setTextSafeBtn = new System.Windows.Forms.Button();
this.setTextBackgroundWorkerBtn = new System.Windows.Forms.Button();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(, );
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(, );
this.textBox1.TabIndex = ;
//
// setTextUnsafeBtn
//
this.setTextUnsafeBtn.Location = new System.Drawing.Point(, );
this.setTextUnsafeBtn.Name = "setTextUnsafeBtn";
this.setTextUnsafeBtn.Size = new System.Drawing.Size(, );
this.setTextUnsafeBtn.TabIndex = ;
this.setTextUnsafeBtn.Text = "Unsafe Call";
this.setTextUnsafeBtn.Click += new System.EventHandler(this.setTextUnsafeBtn_Click);
//
// setTextSafeBtn
//
this.setTextSafeBtn.Location = new System.Drawing.Point(, );
this.setTextSafeBtn.Name = "setTextSafeBtn";
this.setTextSafeBtn.Size = new System.Drawing.Size(, );
this.setTextSafeBtn.TabIndex = ;
this.setTextSafeBtn.Text = "Safe Call";
this.setTextSafeBtn.Click += new System.EventHandler(this.setTextSafeBtn_Click);
//
// setTextBackgroundWorkerBtn
//
this.setTextBackgroundWorkerBtn.Location = new System.Drawing.Point(, );
this.setTextBackgroundWorkerBtn.Name = "setTextBackgroundWorkerBtn";
this.setTextBackgroundWorkerBtn.Size = new System.Drawing.Size(, );
this.setTextBackgroundWorkerBtn.TabIndex = ;
this.setTextBackgroundWorkerBtn.Text = "Safe BW Call";
this.setTextBackgroundWorkerBtn.Click += new System.EventHandler(this.setTextBackgroundWorkerBtn_Click);
//
// backgroundWorker1
//
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//
// Form1
//
this.ClientSize = new System.Drawing.Size(, );
this.Controls.Add(this.setTextBackgroundWorkerBtn);
this.Controls.Add(this.setTextSafeBtn);
this.Controls.Add(this.setTextUnsafeBtn);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout(); } #endregion
}
}

窗体界面截图:

aaarticlea/png;base64,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" alt="" />

最新文章

  1. [原创]cocos2d-x研习录-第三阶 背景音乐和音效
  2. HDU 1086You can Solve a Geometry Problem too(判断两条选段是否有交点)
  3. 防止SQL注入攻击的一些方法小结
  4. HIVE几种数据导入方式
  5. winform分页管理
  6. SwfUpload vs里运行可以上传文件,放到iis上上传就报404错误。
  7. postgres 利用unique index代替 primay key
  8. php 魔术方法
  9. php实现的太平洋时间和北京时间互转的自定义函数
  10. jquery自定义插件来实现分页的效果
  11. UML-状态图,顺序图,活动图
  12. UNIX网络编程——网络数据包检测
  13. 游戏服务器设计之NPC系统
  14. python 线程Queue 用法代码展示
  15. SharePoint 2016: 数据库正在兼容性范围内运行,建议进行升级
  16. 第一节课:java介绍以及java开发环境的安装
  17. SSD 为什么顺序写比随机写性能更好?
  18. hadoop学习笔记(九):MapReduce程序的编写
  19. 阿里云Linux的mysql安装,使用yum安装
  20. [Deep Learning] 神经网络基础【转】

热门文章

  1. Java三大主流开源工作流引擎技术分析
  2. Koch曲线
  3. when does the View.ondraw method get called
  4. ERP权限设置和CRM分析 (十二)
  5. AmazeUI HTML元素
  6. 2016年11-29 mysql数据库
  7. Magento在IE下登陆不了后台,在Firefox下正常
  8. ARM处理器模式
  9. 六 GPU 并行优化的几种典型策略
  10. 服务器重写技术:rewrite