首页 新闻 会员 周边

主窗体中新开进程,如何在新进程中控制主窗体的控件

0
悬赏园豆:100 [已解决问题] 解决于 2009-09-18 17:30

一个主窗体中新开了一个进程,

 

Code


问题来了,就是当我在新进程中操作主窗体的控件,比如label的时候,就会提示错误,不了操作非本线程创建的控件,这是.NET的安全机制导致的,不能够跨进程进行操作。
然后我使用委托。。也不行,执行到this.label1.Invoke(new Setlbl(SetLabel));就死机了(应该死锁了)
那应该要怎么样才能够在新进程中操作主窗体的控件呢?

问题补充: 虽然还不太懂,不过目前总算有了几种解决方案,先用着。在深入研究。。 还是博客园热闹一点啊,CSDN的懒虫太多了~~~~~
双木的主页 双木 | 初学一级 | 园豆:100
提问于:2009-09-18 16:09
< >
分享
最佳答案
0

在构造函数中加入如下代码:

CheckForIllegalCrossThreadCalls    =    false;


看这里

http://blog.csdn.net/Chendy/archive/2008/06/30/2599780.aspx

收获园豆:50
邀月 | 高人七级 |园豆:25475 | 2009-09-18 16:39
哎,这个刚才也查过,但是“这种方法只是简单的将错误提示禁用了,仍然存在跨线程调用控件的问题。为此可能造成两个线程同时或者循环改变该控件的状态导致线程死锁。 Invoke方法是同步的方法,所以执行过程是有先后顺序的,所以就不会出现那个异常了 ”所以没有试过,你回答后,我试了下,真的可以。。。但为什么用委托的不行呢???
双木 | 园豆:100 (初学一级) | 2009-09-18 16:53
其他回答(2)
0

呵呵,进程间去通讯,这个不合适吧,这个是隔离的,如果是线程间可以在线程间切换。

收获园豆:20
winzheng | 园豆:8797 (大侠五级) | 2009-09-18 16:48
0

为什么不用多线程来实现了,其实那种功能一般用线程来比较方便吧

收获园豆:30
love .net FrameWork | 园豆:175 (初学一级) | 2009-09-18 16:52
这个线程能够实现吗,因为我需要用到外部的程序,所以才采用新建进程的。。我试下用线程
支持(0) 反对(0) 双木 | 园豆:100 (初学一级) | 2009-09-18 17:05
试了下,还是不知道该怎么下手,我想应该是在线程中调用进程,那效果还是一样啊,,,然后试了一下新开一个线程,用于手动获取进程的输出信息,这样就可以,但总觉得多此一举。。
支持(0) 反对(0) 双木 | 园豆:100 (初学一级) | 2009-09-18 17:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册