跨线程

wzp144650 2011-03-16 11:09:57
子线程中show了一个窗体,如何在主线程控制它?
...全文
126 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
友林 2011-03-16
  • 打赏
  • 举报
回复
你能拿的到子线程中窗体的句柄吗?拿的到就可以通过委托,或者Post消息来做啊。
lizhibin11 2011-03-16
  • 打赏
  • 举报
回复
这是主线程的,子线程t新开窗口fm

Form2 fm;
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(show));
t.Start();
}
void show()
{
fm = new Form2();
Application.Run(fm);
}

主线程操作子线程的控件

private void button2_Click(object sender, EventArgs e)
{
fm.Invoke(new Action(() =>
{
fm.textBox1.Text = "2323";
}));
}
lizhibin11 2011-03-16
  • 打赏
  • 举报
回复
我测试了可以的.
使用新开的窗口实例的Invoke方法
walkghost 2011-03-16
  • 打赏
  • 举报
回复
我个人认为还是楼主最好在主线程里Show窗体,然后通过委托控制。
改动大,主要还是因为设计的不合理。
wzp144650 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wanghao2979 的回复:]

可以读到这个子线程吗



最好把这个子线程保存起来,以后好方便操作
[/Quote]
可以
超银 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 findcaiyzh 的回复:]
窗口本身就有线程,应该不需要在线程中显示吧。
[/Quote]
开个线程show也是一样么。窗口是另一个线程
要操作,那就得public么,还能有什么办法,再委托不可能再Form1中去委托Form2的吧,除非把它的元素都public吧。关闭它的话,给个public的函数操作关闭么。除了子线程委托到STAThread中的元素,其他的都public搞定~
wanghao2979 2011-03-16
  • 打赏
  • 举报
回复
可以读到这个子线程吗



最好把这个子线程保存起来,以后好方便操作
wzp144650 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 findcaiyzh 的回复:]

窗口本身就有线程,应该不需要在线程中显示吧。
[/Quote]
但现在确实是在子线程中show出来的
宝_爸 2011-03-16
  • 打赏
  • 举报
回复
窗口本身就有线程,应该不需要在线程中显示吧。
wzp144650 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 walkghost 的回复:]

把这个窗体放在主线程里show吧,然后在子线程里通过委托来控制它。
[/Quote]

不行。。改动太大
wzp144650 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 real_monster 的回复:]

怎么控制?
[/Quote]
。。。。。。。。随便什么操作都可以啊,最简单的关闭它等等
walkghost 2011-03-16
  • 打赏
  • 举报
回复
把这个窗体放在主线程里show吧,然后在子线程里通过委托来控制它。
超银 2011-03-16
  • 打赏
  • 举报
回复
怎么控制?

110,533

社区成员

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

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

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