如何不用多线程,实现在一个console程序中实例化一个WinForm

spacecm 2006-10-25 02:17:09
我new一个Form,然后Form.Show()就一闪而过,考虑到有个控件不能在多线程的环境中运行,如何解决这个问题?
如果用System.Windows.Forms.Application.Run后面的程序就不执行了。
[STAThread]
public static void Main()
{
System.Windows.Forms.Form form = new System.Windows.Forms.Form();
form.Show();//一闪而过
......
}

另外能否在程序中用反射动态运行一个新的application,显示这个form
效果就像
[STAThread]
public static void Main()
{
System.Windows.Forms.Application.Run(new System.Windows.Forms.Form());
}
但是这个Run的参数是自己动态传入的继承自System.Windows.Forms.Form的窗口
...全文
144 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xvting 2006-10-25
  • 打赏
  • 举报
回复
试试在另一个程序域里加载Form。

参考
http://www.microsoft.com/china/msdn/library/langtool/vcsharp/ousNET.mspx?mfr=true
真相重于对错 2006-10-25
  • 打赏
  • 举报
回复
你试试
winform程序
Application.Run( xxx );
MessageBox.Show( "foo" ); //这里也不会执行,只有xxx 窗口退出后才可以
spacecm 2006-10-25
  • 打赏
  • 举报
回复
[STAThread]
public static void Main()
{
System.Windows.Forms.Form form = new System.Windows.Forms.Form();
form.ShowDialog();
Console.WriteLine("OK");//这个ok要关闭form窗口才能显示,能不能让form继续显示,但后面的代码继续运行?
Console.ReadLine();
}
真相重于对错 2006-10-25
  • 打赏
  • 举报
回复
说简单点就是win32 gui 程序会造成程序本身的阻塞(通过消息循环,看看c的win gui程序源码),而console不会,.net winform也是一样,只不过有.net框架为你做,.net colsoe没有winform 初始处理,所以不能阻塞,

showDialog应该可以,因为对话框回自己阻塞,你说不执行下面的代码是什么意思??
spacecm 2006-10-25
  • 打赏
  • 举报
回复
showDialog和System.Windows.Forms.Application.Run一样啊,后面的程序就不执行了
njufrog 2006-10-25
  • 打赏
  • 举报
回复
建立一个Windows Form工程,
然后在project属性里改成Console工程,
就可以看到是怎么回事了
真相重于对错 2006-10-25
  • 打赏
  • 举报
回复
showDialog
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-25 02:17
社区公告

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