原文发布时间为:2009-03-30 —— 来源于本人的百度文章 [由搬家工具导入]

public long str1, str2, str3, str4, str5, sum=0,sum1=0;

public void button1_Click(object sender, EventArgs e)
{

Thread.CurrentThread.Name = "主线程 ";

Thread objThreadOne = new Thread(new ThreadStart(fun1));

objThreadOne.Name = "子线程 1 ";

Thread objThreadTwo = new Thread(new ThreadStart(fun2));

objThreadTwo.Name = "子线程 2 ";

objThreadOne.Start();

objThreadTwo.Start();

objThreadOne.Priority = ThreadPriority.Highest;


}
void fun1()
{
str1 = long.Parse(textBox1.Text);
str2 = long.Parse(textBox2.Text);
lock(this)

for (long i = str1; i <= str2; i++)
{
sum = sum + i;

}
textBox4.Text = sum1.ToString();

}
void fun2()
{
str1 = long.Parse(textBox1.Text);
str2 = long.Parse(textBox2.Text);

lock (this)

for (long i = str2; i <= str1; i--)
{
sum1 = sum1 + i;

}
textBox5.Text = sum1.ToString();

}

private void button2_Click(object sender, EventArgs e)
{
textBox4.Text = " ";
textBox1.Text = " ";
textBox2.Text = " ";
str1 = 0;
str2 = 0;
sum = 0;
}

报错线程间操作无效: 从不是创建控件“textBox4”的线程访问它。

解决方法有两种,但是推荐第二种方法:

1、System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

2、

因为你这个控件是主线程创建的,它依附于创建窗体的主线程.因此,要在子线程去访问占资源的类型,我们需要跨线程调用.textBox4.InvokeRequire用于判断是否需要跨线程,返回True为需要跨线程,此时你需要定义一个委托类来将一个含赋值语句的方法封装起来,通过textBox4.Invoke来调用这个委托.代码如下:
public delegate void SetTextHandler(string text);
private void SetText(string text)
{
if(textBox4.InvokeRequired==true)
{
SetTextHandler set=new SetTextHandler(SetText);//委托的方法参数应和SetText一致
textBox4.Invoke(set,new object[]{text}); //此方法第二参数用于传入方法,代替形参text
}
else
{
textBox4.Text=text;
}

}
那么fun2函数可以改写成:
void fun2()
{
str1 = long.Parse(textBox1.Text);
str2 = long.Parse(textBox2.Text);

lock (this)

for (long i = str2; i <= str1; i--)
{
sum1 = sum1 + i;

}
SetText( sum1.ToString());

}
注意那两句 str1 = long.Parse(textBox1.Text);也需要写成委托形式,读取数据的方法和赋值的方法类型.

线程间操作无效: 从不是创建控件“textBox4”的线程访问它的更多相关文章

  1. 关于“线程间操作无效: 从不是创建控件’textBox1‘的线程访问它”异常的解决方法

    线程间操作无效: 从不是创建控件“textBox1”的线程访问它 背景:通过一个辅助线程计算出的一个值赋给textBox1.text;解决办法:1.直接在窗体的构造函数中加:System.Window ...

  2. bug:C#线程间操作无效: 从不是创建控件" XX" 的线程访问它

    今天遇到这个问题,百度了下,把解决的方法总结出来.我们在ui线程创建的子线程操作ui控件时,系统提示错误详细信息为:线程间操作无效: 从不是创建控件“XXX”的线程访问它. 就我知道的有三种方法,先看 ...

  3. 004. 线程间操作无效: 从不是创建控件“textBox1”的线程访问它

    最简单的方法(不推荐): 在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false; 为什么不推荐上面的方法: 为避免空间造成死锁, .net f ...

  4. (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。

    关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 ...

  5. 从.NET 1.1 升级到.NET 4.0 遇到 线程间操作无效: 从不是创建控件 [XX] 的线程访问它.

    有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数 问题原因是 .NET2.0 以后拒绝 ...

  6. System.InvalidOperationException:“线程间操作无效: 从不是创建控件“btnSearch”的线程访问它。

    System.InvalidOperationException:“线程间操作无效: 从不是创建控件“btnSearch”的线程访问它.”这个问题属于跨线程问题 在Form1重载中写上一行代码 Sys ...

  7. System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”

    “System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: 从不是创建控件“tx ...

  8. C#: 线程间操作无效: 从不是创建控件“dataGridView”的线程访问它

    最近在修改自动化小工具,用多线程来解决后台拷贝导致WinForm界面卡死的情况,但是遇到过错:线程间操作无效: 从不是创建控件“dataGridView”的线程访问它. 这是因为在多线程程序中,新创建 ...

  9. 【转】线程间操作无效: 从不是创建控件“textBox2” 的线程访问它。

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

随机推荐

  1. MySQL表碎片整理

    MySQL表碎片整理 1. 计算碎片大小 2. 整理碎片 2.1 使用alter table table_name engine = innodb命令进行整理. 2.2 使用pt-online-sch ...

  2. python简单实用gunicorn部署

    linux 安装 pyuthon 安装   pip install gunicorn manage.py 文件 from app import create_app app = create_app( ...

  3. 【PHP】Thinkphp 七牛云API对接

    访问一个网站,图片的流量占的比例是非常高的!在你的服务器硬盘上,图片占的容量也是非常高的. 如果要搞一个图片非常多,用户量又很庞大的网站,那么,得花多少钱烧在服务器上? 这种时候,当然要用第三方图片存 ...

  4. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  5. C语言实现判断分数等级

    从屏幕上输入一个学生的成绩(0-100),对学生成绩进行评定: <=60为"E" 60~69为"D" 70~79为"C" 80~89为 ...

  6. 学习pytho第l六天 常用字符串用法

    name='my name is dream' print(name.capitalize())#首字母大写 print(name.count(‘’a‘’))#判断字符串里有多少个a print(na ...

  7. CSU-2007 Football Training Camp

    Football Training Camp 在一次足球联合训练中一共有n支队伍相互进行了若干场比赛. 对于每场比赛,赢了的队伍得3分,输了的队伍不得分,如果为平局则两支队伍各得1分. Input 输 ...

  8. sedgewick增量序列的希尔排序

    #include<bits/stdc++.h> using namespace std; int s[3]={1,5,19}; void shellsort(int *a,int n){ ...

  9. Sentry 错误监控

    错误监控:https://sentry.io 支持语言或平台: 

  10. DevOps实施的三种IT障碍

    [TechTarget中国原创] 现今DevOps可谓是红遍半边天,但正因为它是新的东西,企业也在不停的犯同样的错误.从这些挑战中学习,让你的DevOps项目取得成功. DevOps正在以一种更有效的 ...