Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在申请前显示表单。运行_C#_Winforms - Fatal编程技术网

C# 在申请前显示表单。运行

C# 在申请前显示表单。运行,c#,winforms,C#,Winforms,我有一个静态方法,它将窗体显示为对话框。该方法可以从应用程序的任何地方调用,比如从普通线程调用,从UI线程调用。它的电话到处都有。此方法所做的另一件事是,它不会阻止调用,甚至不会阻止进一步调用表单的ShowDialog()。所以最后我得到了下面的代码 public static void Method() { // doesn't block the call ThreadStart threadStrart = delegate

我有一个静态方法,它将窗体显示为对话框。该方法可以从应用程序的任何地方调用,比如从普通线程调用,从UI线程调用。它的电话到处都有。此方法所做的另一件事是,它不会阻止调用,甚至不会阻止进一步调用
表单的
ShowDialog()
。所以最后我得到了下面的代码

   public static void Method()
   {        // doesn't block the call
            ThreadStart threadStrart = delegate
            {
               DialogResult result = new FormTest().ShowDialog();
               //further code removed
            };
            Thread thread = new Thread(threadStrart) { IsBackground = false };
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
    }
一切正常,如预期的那样。但在
应用程序之前调用此方法时会出现问题。请运行
。然后,在调用
Application.Run
之前,它不会显示。然而,在设计中,应用程序可能会在不调用
应用程序的情况下退出/关闭。运行
。所以在这种情况下,用户将永远看不到表单


PS:该表单不是主表单。

如果没有
应用程序,您如何等待。Run()
?在
应用程序之前,需要执行循环和其他一些操作。Run
。这是一个Z顺序问题。对话框需要所有者,而您的对话框没有所有者,因为它在工作线程上运行。因此,它的所有者是桌面窗口。在主线程中创建的窗口将与其重叠。这不是唯一的问题,您还可以进行调试。不要这样做。@HansPassant:除此之外,你还有什么建议?我们怎么能猜出你为什么要这样做?