如何使子线程可以触发事件

singsky 2006-08-08 10:38:14
为了简单说明问题,我将其弄成C#的windows程序
代码片断如下:

private void button1_Click(object sender, System.EventArgs e)
{
Form2 f2 = new Form2();
StartThread(new ThreadStart(f2.Show));//f2.Show();
}
private void StartThread(ThreadStart target)
{
Thread doStep = new Thread(target) ;
doStep.IsBackground = true ;
doStep.Start() ;
}
这是Form1中的代码,主要作用是显示Form2窗口,要在子线程中调用Show显示,(运行效果跟直接调用f2.Show()一样即可,但不要在主线程中调用Show()),可像上面这样f2闪一下就消失了,请达人帮我实现在子线程中显示f2,并可在f2中进行操作,点按钮触发事件之类的就行。谢谢!
...全文
285 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
haha0369 2006-08-18
  • 打赏
  • 举报
回复
D
singsky 2006-08-09
  • 打赏
  • 举报
回复
JasonHeung(拥有一切不过就这样笑着哭)
f2与f1可能是完全不相关的,它们之间也许只是通过线程启动另一个,
JasonHeung 2006-08-09
  • 打赏
  • 举报
回复
你把Form2的实例变量定义成Form1的类成员!
singsky 2006-08-09
  • 打赏
  • 举报
回复

Knight94(愚翁):
我看参考程序里一个主要的方法是this.BeginInvoke( mi );也就是引用了当前窗口的this,能否不用这个this,因为有时并不一定能获得当前窗口的this,..
zhgroup 2006-08-08
  • 打赏
  • 举报
回复
用委托实现。
Knight94 2006-08-08
  • 打赏
  • 举报
回复
参看:
http://blog.csdn.net/Knight94/archive/2006/05/27/757351.aspx
singsky 2006-08-08
  • 打赏
  • 举报
回复
我得消化下先,,,
ProjectDD 2006-08-08
  • 打赏
  • 举报
回复
Show()本来就是闪一下就过了你的用法有问题,而且涉及到多线程的问题先还是要多参看MSDN标准帮助文档中的有关内容才行。
  • 打赏
  • 举报
回复
上面“主线程”写错了,是指你的 Form1 的Load代码部分。
  • 打赏
  • 举报
回复
你可以将 new Form2() 放在线程中执行,以加快装入窗体速度,然后在主线程中(Join之后)调用 f2.Show()。
Knight94 2006-08-08
  • 打赏
  • 举报
回复
to 那种方法会使主窗口无法操作,如何才可以使f1,f2都可以独立操作.

线程中的控制并不影响到主窗体的操作,你需要看看你是用Show来显示还是showdialog显示。

不同的显示方式会造成不同的结果。
singsky 2006-08-08
  • 打赏
  • 举报
回复
Knight94(愚翁)
:那种方法会使主窗口无法操作,如何才可以使f1,f2都可以独立操作.

zhgroup(Hotel California)
可否说的具体些,

谢谢两位

110,502

社区成员

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

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

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