C# 在表单中打开文件时,未处理ThreadStateException

C# 在表单中打开文件时,未处理ThreadStateException,c#,forms,file,button,xna,C#,Forms,File,Button,Xna,我有一个表单名Form1.cs,当我运行它时,它有一个错误:ThreadStateException未受影响 我试图打开一个文件从一个理想的位置,然后后者有它,使文件将自动加载到屏幕上的文本框。我听说过这个[STAThread],但我对如何添加它感到困惑。当我尝试在main方法中使用它时,它显示为“在该声明类型上无效” Form1.cs: public partial class Form1 : Form { public Form1() { Initializ

我有一个表单名
Form1.cs
,当我运行它时,它有一个错误:ThreadStateException未受影响

我试图打开一个文件从一个理想的位置,然后后者有它,使文件将自动加载到屏幕上的文本框。我听说过这个
[STAThread]
,但我对如何添加它感到困惑。当我尝试在main方法中使用它时,它显示为“在该声明类型上无效”

Form1.cs

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog1 = new OpenFileDialog();

        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string strfilename = openFileDialog1.FileName;

            MessageBox.Show(strfilename);
        }
    }
}
解决方案资源管理器:

Game1.cs
如果它启动了,我有一个函数,可以通过按F1键调用窗体弹出:

protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        if (Keyboard.GetState().IsKeyDown(Keys.F1) && (!isForm1Open))
        {
            isForm1Open = true;
            Form1 form1 = new Form1();
            form1.FormClosed += new System.Windows.Forms.FormClosedEventHandler(
                (s, e) => { isForm1Open = false; });
            form1.ShowDialog();
        }

        base.Update(gameTime);
    }

[STAThread]
是一个属性,它将您的方法标记为在中运行。对于WinForms程序,必须将此属性放在Program.cs'
Main
方法上,如下所示:

[STAThread]
static void Main()
{
    Form1 f = new Form1();
    Application.Run(f);
}

这是因为WinForms直接与COM组件交互(UI小部件大部分仍然是COM,Windows的窗口和文件系统也是如此)。

[STAThread]
是一个属性,它将您的方法标记为在应用程序中运行。对于WinForms程序,必须将此属性放在Program.cs'
Main
方法上,如下所示:

[STAThread]
static void Main()
{
    Form1 f = new Form1();
    Application.Run(f);
}

这是因为WinForms直接与COM组件交互(UI小部件大部分仍然是COM,Windows的窗口和文件系统也是如此)。

@Roy\u Dictus我现在做的是将
Game1.cs
作为一个主类,但我必须关闭一个主函数
public Game1()
。让我再补充一些信息。很抱歉我今天太傻了,我有点想不起你说我应该把
STAT
放在
Program.cs
中。谢谢你的帮助,希望下次我能更敏锐地观察。@Roy_Dictus我现在做的是将一个
Game1.cs
作为一个主类,但我对一个主函数的关闭将是
public Game1()
。让我再补充一些信息。很抱歉我今天太傻了,我有点想不起你说我应该把
STAT
放在
Program.cs
中。谢谢你的帮助,希望下次我能更敏锐地观察。