关于在子线程创建子窗体;

_lee_chong 2012-11-03 10:56:47
我的本意想在程序主窗体启动未用到子窗体的时候;在后台线程做子窗体的创建并配好肤,以提升用户体验;
但是我有5个子窗体,其中2个可以正常使用;另外有3个子窗体showdialog出现问题,
问题表现为:主窗体已被祖塞(正常),任务栏有显示子窗体,在win7下鼠标移上任务栏后桌面能预览显示出这个子窗体(正常);但是除了鼠标移到任务栏时的预览意外,就是无法显示出那个子窗体....

我的子线程启动函数里也就这点代码;FormEdit子窗体的构造函数里也和那个两个正常使用的窗体一样;只有一个vs自动生成的初始化函数,没做其他任务处理;
private void createForms()
{
_formEdit = new FormEdit();
......
}

希望了解这方面东西的朋友提供一些可能的思路;
网上有说子线程结束以后子窗体被释放了的,显然不是这原因;但是我在子窗体的paint里只有在showdialog的时候触发了一次paint,后面就再没paint过了....
...全文
201 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mngzilin 2012-11-04
  • 打赏
  • 举报
回复
你的代码从目前来看,做简单的测试没问题 你的代码可能其他地方有问题
_lee_chong 2012-11-04
  • 打赏
  • 举报
回复
引用 8 楼 mngzilin 的回复:
你的代码从目前来看,做简单的测试没问题 你的代码可能其他地方有问题
...木有人提供一些可能出现这种问题的原因了么
_lee_chong 2012-11-03
  • 打赏
  • 举报
回复
showdialog阻塞主线程这是正常的呀;我软件里表现也是正常的,主窗体被祖塞;这里问题是在桌面看不到那个被showdialog出来的子窗体 createforms 函数里就 5个窗体的 new ;没别的;
mngzilin 2012-11-03
  • 打赏
  • 举报
回复
你最好把createForms的代码多贴出来一些,否则没法判断。。
mngzilin 2012-11-03
  • 打赏
  • 举报
回复
showdialog不同于show,showdialog要阻塞UI线程的消息循环
_lee_chong 2012-11-03
  • 打赏
  • 举报
回复
另外,我在主线程,_formEdit.Showdialog()的时候,子窗体也触发了一次OnPaint的呀
_lee_chong 2012-11-03
  • 打赏
  • 举报
回复
引用 2 楼 hhddzz 的回复:
没有消息循环 收不到WM_PAINT 当然就不会重绘 调用Application.Run()可以在当前线程展开消息循环
可是为什么,那5个窗体里,另外2个可以正常呢?
hhddzz 2012-11-03
  • 打赏
  • 举报
回复
没有消息循环 收不到WM_PAINT 当然就不会重绘 调用Application.Run()可以在当前线程展开消息循环
机器人 2012-11-03
  • 打赏
  • 举报
回复
UI线程有且只有一个。不要在子线程里创建窗体。

110,499

社区成员

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

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

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