C# 线程结束事件

你妹的特盗不 2009-09-17 06:14:20
我下面这样使用

Thread oThread = new Thread(dofunction);
oThread.Start();
pivate void dofunction()
{
//run some function or code

//here end..
SendMessage(this.Handle, WM_CLOSE, (IntPtr)0, (IntPtr)0);
//这里,这样发消息给主线程或主窗体吧
会提示说 this.Handle 是一个错误的值,在调试中会中断,直接编译,然后运行不会报错
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

Additional information: Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on.
}

请问如何在子线程结束后让主线程知道

不要告诉我
Thread oThread = new Thread(dofunction);
oThread.Start();
while(oThread的状态判断)
都是另开线程,肯定不想主线程被阻断

在主线程不被阻断的情况下 子线程结束能让主线程知道,最好是消息循环
...全文
1400 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
你妹的特盗不 2009-09-17
  • 打赏
  • 举报
回复
线程结束后,我想让主线程知道,我的主线程不能阻断,新开线程做事,然后主线程,可以做别的事
子线程完成后,要让主线程知道,然后在run对应的funcion ,我试过,这个function直接放在子线程中运行不了
我找到解决方法了,谢谢楼上几位热心人~~

参考这里 http://www.csharpwin.com/csharpspace/2454.shtml


pivate void dofunction()
{
//run some code....

//here end.....
setinfo_notidelegate sn=new setinfo_notidelegate()
//sn();
this.Invoke(sn);//inbokr 的参数得是委托函数 this.Invoke(函数,参数)
}


结贴
CsToD 2009-09-17
  • 打赏
  • 举报
回复
你为什么总是要发消息?把代码写到setinfo_noti_里不就行了吗
你妹的特盗不 2009-09-17
  • 打赏
  • 举报
回复
我也试着做了委托但是还是不错,可能是使用不当,请指教



delegate void setinfo_notidelegate();
public void setinfo_noti_()
{
SendMessage(this.Handle, WM_CLOSE, (IntPtr)0, (IntPtr)0);
}

Thread oThread = new Thread(dofunction);
oThread.Start();
pivate void dofunction()
{
//run some code....

//here end.....
setinfo_notidelegate sn=new setinfo_notidelegate()
sn();
}

在运行到sendmessage时还是同样的错误
CsToD 2009-09-17
  • 打赏
  • 举报
回复
MethodInvoker mi;
pivate void dofunction()
{
.....................


if(mi!=null)
mi();

}
TTOJJ 2009-09-17
  • 打赏
  • 举报
回复
笨啊!!事件是干什么用的~~委托是干什么吃的
ztenv 2009-09-17
  • 打赏
  • 举报
回复
1、试试线程函数最后触发事件
2、试试信号量

110,539

社区成员

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

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

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