请问子线程如何通知主线程执行方法?

nicholaskj 2010-10-06 03:44:56
该贴中http://topic.csdn.net/u/20090227/15/5be6748d-c496-42cf-86a9-f40cb80bcfbb.html
提到子线程通知主线程做出响应,用到的是Form的Invoke方法

但是,我的主线程不是Form的,是控制台的,请问有没有类似与Invoke的方法,在子线程中通知主线程做出响应?

谢谢回帖
...全文
653 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
太上老君 2010-10-07
  • 打赏
  • 举报
回复
console的主线程是main啊,主线程出不了main啊,主线程到main的},整个程序就结束了,怎么叫通知主线程执行方法啊,主线程就一个main方法。console的多线程只是让main执行到某一句停住而已。
第二,你的winform窗体那也不是主线程啊,主线程还是main,窗体只是main创建的第一个对象,但是mian只有这一句(大意),才显得像主线程,其实他只是运行在主线程上的一个对象,但是他的特点是主要不关闭,main就没法继续执行,窗体关闭后,main还会继续执行}这个才完。
要想达到你说的这种,先弄一个类,像form类一样不关就卡住main不动的那种,然后main以单线程创建实例,这样这个实例就在主线程了,从这个类里开线程,然后用委托回调,这样就你说的子线程通知主线程了,很奇怪的一个程序。
nicholaskj 2010-10-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 laotse 的回复:]

console的主线程是main啊,主线程出不了main啊,主线程到main的},整个程序就结束了,怎么叫通知主线程执行方法啊,主线程就一个main方法。console的多线程只是让main执行到某一句停住而已。
第二,你的winform窗体那也不是主线程啊,主线程还是main,窗体只是main创建的第一个对象,但是mian只有这一句(大意),才显得像主线程,其实他只是运行在主线程上的一个对象……
[/Quote]

您看问题确实透彻
我的主线程确实不是控制台

因为我做的二次开发,主程序加载我的dll

不知道能不能在dll中获取主窗口的句柄构造form,这样就可以使用invoke了,在主线程中调用方法。
肄若芸 2010-10-07
  • 打赏
  • 举报
回复
委托+事件


用法参考:http://msdn.microsoft.com/zh-cn/library/ms173176(v=VS.80).aspx
nicholaskj 2010-10-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zenghd 的回复:]

在多线程中不能直接执行与界面有关的代码,假如涉及到界面,那就虽然使用到InvokeRequired、Invoke或者委托、 事件
既然你不能使用InvokeRequired和Invoke那就使用委托和事件
至于委托是不是属于线程的,那有什么关系呢?
[/Quote]

因为有些代码必须在主线程下执行,在子线程下会出错,我也弄不清为什么

所以想在子线程通知主线程,让主线程做出反应
ZengHD 2010-10-06
  • 打赏
  • 举报
回复
在多线程中不能直接执行与界面有关的代码,假如涉及到界面,那就虽然使用到InvokeRequired、Invoke或者委托、 事件
既然你不能使用InvokeRequired和Invoke那就使用委托和事件
至于委托是不是属于线程的,那有什么关系呢?
nicholaskj 2010-10-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zenghd 的回复:]

委托 事件
[/Quote]

不知道能否详细一些,我尝试使用委托,
但是刚才有人说,线程执行的委托属于线程的,该怎么处理呢?
ZengHD 2010-10-06
  • 打赏
  • 举报
回复
委托 事件

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧