c# CheckForIllegalCrossThreadCalls 解决后台线程访问UI界面控件的问题

原创 2016年08月30日 10:42:51

在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为false

public Form1()
{
   InitializeComponent();
   CheckForIllegalCrossThreadCalls = false;
}

 

也可以针对某一控件进行设置,例如:

   TextBox.CheckForIllegalCrossThreadCalls = false;

界面与后台工作线程分离的实现方案

在我们实际应用中,常常会遇到界面与后台工作线程分离的情况。特别是在写多线程的服务程序和批处理程序时经常用到的,随着技术的发展,人们已经不满足于命令行的服务程序,需要具有更好的可视化的、图形化的界面服务...
  • xsc2001
  • xsc2001
  • 2006年04月13日 12:21
  • 2119

多线程编程(4):多线程与UI操作

为了让程序尽快响应用户操作,在开发Windows应用程序时经常会使用到线程。对于耗时的操作如果不使用线程将会是UI界面长时间处于停滞状态,这种情况是用户非常不愿意看到的,在这种情况下我们希望使用线程来...
  • zhoufoxcn
  • zhoufoxcn
  • 2010年01月18日 08:54
  • 14124

WinForm(C#)中跨线程访问控件的解决方法

由于多线程可能导致对控件访问的不一致,导致出现问题。C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出异常。 解决办法有两个: 1、不进...
  • SunCherryDream
  • SunCherryDream
  • 2014年10月11日 08:44
  • 1676

C#c# 从不是创建控件 的线程访问它。

有两种方式解决  1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false; 2.使用Invoke等委托函数。 问题原因是。ne...
  • fengda2870
  • fengda2870
  • 2016年06月01日 10:21
  • 3819

线程间操作无效: 从不是创建控件“label1”的线程访问它。C#定时器

线程间操作无效: 从不是创建控件“label1”的线程访问它。 我在使用线程操作winfrom控件对象的时候报错,后来才发现问题所在:多线程中直接调用界面控件的方法是错误的做法,Invoke 和...
  • kllxyu
  • kllxyu
  • 2013年06月18日 17:35
  • 5319

在线程中访问UI控件

 在线程中是不能直接访问UI控件,但是有时候又确实要访问,这对于初学者来说可能有些困难,现就简单的说明一下方法,希望有所帮助。,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox.....
  • yumanqing
  • yumanqing
  • 2007年01月29日 16:19
  • 1655

C# 委托 从不是创建控件“richTextBox1”的线程访问它。解决方案,利用委托

delegate void SetTextCallBack(string text);   private void SetText(string text)   {       if (this.r...
  • zhaowenkaiyongheng
  • zhaowenkaiyongheng
  • 2016年12月23日 14:07
  • 833

异步委托跨线程访问控件解决界面卡死

下面来看第二种方案,就是使用delegate和invoke来从其他线程中控制控件信息。网上有很多人写了这种控制方式,然而我看了很多这种帖子,表明上看来是没有什么问题的,但是实际上并没有解决这个问题,首...
  • ryong1267
  • ryong1267
  • 2015年08月06日 15:57
  • 920

C# Winform使用线程,委托定时更新界面UI控件,解决界面卡顿问题

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • smartsmile2012
  • smartsmile2012
  • 2017年05月08日 16:08
  • 1263

C#中线程间操作无效: 从不是创建控件 txtBOX 的线程访问它

delegate void 委托名(方法名); void 方法名() { if(txtBox.invokeRequered) { 委托名 d=new 委托名();...
  • u011555996
  • u011555996
  • 2016年11月13日 15:41
  • 869
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c# CheckForIllegalCrossThreadCalls 解决后台线程访问UI界面控件的问题
举报原因:
原因补充:

(最多只允许输入30个字)