木子屋 Dnawo's BLOG

WinForm调用主窗体Close方法失败:从不是创建控件的线程访问它

👤 dnawo 📅 2014-07-18 👁 3774 👍 0 💬 0 🔄 本站原创
事情是这样子的:在主窗体点击按钮打开了窗体B,我希望关闭窗体B时关闭整个应用程序,首先想到的一个方案是在窗体B的FormClosed事件中调用主窗体的Close方法,结果不可行。

主窗体程序:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        (new Form2()).Show(this);
    }
}

窗体B程序:
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        Form1 frm = this.Owner as Form1;
        if (frm != null)
        {
            frm.Close();
        }
    }
}

执行出错,提示:从不是创建控件“button1”的线程访问它:

图片

解决方法

窗体B改用Application.Exit方法关闭应用程序,问题解决:

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.Exit();
}

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 C#比较版本号新旧函数 下一篇 → C#判断计算机是否联网