线程间操作无效: 从不是创建控件"Form1"的线程访问它.

我用this调用Form1的,出现了这个错误... 我用this调用Form1的,出现了这个错误 展开
 我来答
yesyes科
2020-05-12 · TA获得超过2.6万个赞
知道答主
回答量:608
采纳率:0%
帮助的人:10.2万
展开全部

线程间操作无效: 从不是创建控件"Form1"的线程访问它,是设置错误造成的,解决方法如下:

1、首先在VS里面新增一个WinForm项目,在窗体里面新增一个按钮和一个文本框。

2、然后在文本框设置下吗,允许多行的属性。

3、然后给按钮新增一个执行线程的代码,注意关键性的代码:this.Invoke(new Action(() =>  这里写控件  }))。

4、然后执行效果,就是每隔一秒输出一个数字,这个效果一般是用在写日志上,或者一些实时提示,就完成了。

5、最后注意,如果不加在线程里面直接用的话会报错,如图所示。

舞少驾到
推荐于2017-09-10 · TA获得超过438个赞
知道小有建树答主
回答量:649
采纳率:0%
帮助的人:370万
展开全部
有两种方式解决
1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;
2.使用Invoke等委托函数。

问题原因是。net2.0以后拒绝多线程访问空间,避免空间造成死锁。以前Control.CheckForIllegalCrossThreadCalls =false;默认就是这样,现在默认为true。
如果不会好几个线程同时操作一个控件用方法1就可以。如果存在多个线程一起操作控件使用方法2

方法2可以

Invoke(new MethodInvoker(delegate()
{
//do something... }));
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫色浪漫眼
2012-10-30 · TA获得超过247个赞
知道小有建树答主
回答量:577
采纳率:100%
帮助的人:146万
展开全部
把错误的代码贴出来
更多追问追答
追问
displayForm mydf = new displayForm();
mydf.MdiParent = this;
mydf.Show();
以上就是代码,是在子线程函数里面的
追答
有没有设置
Form.CheckForIllegalCrossThreadCalls = false;
是否进行控件操作线程的检查
这句代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式