C# 我的表格没有在STA中打开

C# 我的表格没有在STA中打开,c#,multithreading,winforms,C#,Multithreading,Winforms,我正在尝试从我的登录表单打开我的主表单 Application.Run(new Form1(usernameText.Text)); 但它不是在STA开放的。。因此,主窗体中的myfolderBrowserDialog1将不会打开。我的program.cs中有[statisthread],就在static void Main()的上方,但它仍然不起作用。。。所以我不知道该怎么办 [STAThread] static void Main() { Application.EnableVis

我正在尝试从我的登录表单打开我的主表单

Application.Run(new Form1(usernameText.Text));
但它不是在STA开放的。。因此,主窗体中的my
folderBrowserDialog1
将不会打开。我的program.cs中有
[statisthread]
,就在
static void Main()
的上方,但它仍然不起作用。。。所以我不知道该怎么办

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new loginForm());
}

以下是Servy对您的回复:

转到program.cs文件并修改它,以便显示登录表单。然后,在它关闭后,确定是否应该打开另一个表单

它可能看起来像这样:

LoginForm loginform = new LoginForm();
Application.Run(loginform);

if (loginform.DialogResult == DialogResult.Yes)
    Application.Run(new MainForm());
//TODO handle error cases

有什么问题?发生了什么?我不确定,但我认为调用两次
Application.Run()
是件坏事。不确定这是否导致了你的问题。如果是这样,您可以使用
Form.Show()
,并使用
Application.Run()
的无参数版本(只需确保在主窗体关闭时使用
Application.Exit()
。@SLaks发生这种情况:在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。确保主函数上标记了STAThreadAttribute。只有在流程附加了调试器时才会引发此异常。请使用到您的最后一个问题,而不是您接受的问题。您现在正在运行两个消息循环,一个在另一个内部。这通常是要避免的。你的代码在哪里运行?调用堆栈是什么?