因此,基本上我已经为我的程序制作了一个登录系统,当用户登录时,它会打开Form1。但是我需要Form1作为STA线程。
我在Form1中遇到此错误:
{“在可以进行OLE调用之前,当前线程必须设置为单线程单元(STA)模式。确保您的Main函数具有STAThreadAttribute标记。仅当调试器附加到进程时,才会引发此异常。”}
在这段代码中
SaveFileDialog FSave = new SaveFileDialog()
{
Filter = "Executable Files|*.exe",
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
};
if (FSave.ShowDialog() == DialogResult.OK)//im getting the error here
{
// CodeDom compiler code
}
这是我的Program.cs
using System;
using System.Windows.Forms;
namespace hwid_login_system
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
}
}
这是我在表单登录中打开表单Form1的方式
private void complete()
{
if (loggedin && hwid)
{
MessageBox.Show("Logged in successfully!");
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
t.Start();
this.Close();
}
else
MessageBox.Show("Something else went wrong..", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
public static void ThreadProc()
{
Application.Run(new Form1());
}
最佳答案
如果从第二个线程中调用FSave.ShowDialog(),则会收到此错误。您应该始终从主应用程序线程中打开Windows窗体。
考虑调用一个委托从您的线程向您显示对话框,而不是直接打开表单。
关于c# - 在新窗体上的STAThread错误(SaveFileDialog),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18093272/