如何知道表单应用程序是否打开c#

时间:2010-03-18 11:13:28

标签: c# winforms

有谁知道我怎么知道Windows窗体应用程序(C#)是打开还是客户端关闭它? (在我的应用程序中,我有一个Windows窗体应用程序(Form1),允许用户打开另一个窗体(Form2)。我想知道Form2是打开还是关闭。)
我需要知道,因为我从一个线程运行Form2,我想让线程runnig直到用户关闭Form2。
非常感谢!

4 个答案:

答案 0 :(得分:3)

您可以检查您的应用程序中是否打开了给定类型的表单(使用LINQ):

if (Application.OpenForms.OfType<Form2>().Count() > 0)
{
    // there is an instance of Form2 loaded
}

答案 1 :(得分:0)

您需要详细说明您的问题。您是在谈论从其他应用程序监控应用程序吗?或者一个表格需要知道另一个表格是否开放?或者表格需要知道另一个表格什么时候关闭?

有几种方法可以监控在同一个应用程序中关闭的表单。

在您的表单上调用ShowDialog()而非Show()将确保ShowDialog()调用后的代码无法执行,直到用户关闭该表单。

Form类有一个Visible属性,根据表单是否可见返回true / false。

对于应用程序本身,静态ApplicationExit类上有一个Application事件,它在应用程序关闭之前被调用,因此您可以监听该事件,例如,如果您需要退出时进行一些清理。

答案 2 :(得分:0)

如果您只想运行单个应用程序实例,请检查this链接。
在那里,您还将看到如何检查进程是否仍处于活动状态。

答案 3 :(得分:-1)

如果您的意思是MDI应用程序及其子表单:

private Dictionary<Type, Form> SingleInstanceForms = new Dictionary<Type, Form>();

public Form ActivateForm<T>() where T : Form, new()
{
    Cursor.Current = Cursors.WaitCursor;

    if (!this.SingleInstanceForms.ContainsKey(typeof(T)))
    {
        T newForm = new T();
        //setup child
        newForm.MdiParent = this;
        newForm.WindowState = FormWindowState.Maximized;
        //newForm.Icon = Icon;

        newForm.FormClosed += new FormClosedEventHandler(delegate(object sender, FormClosedEventArgs e)
        {
            this.SingleInstanceForms.Remove(sender.GetType());
        });

        this.SingleInstanceForms.Add(typeof(T), newForm);

        newForm.Show();
        this.Refresh();
    }

    Form formToActivate = this.SingleInstanceForms[typeof(T)];
    formToActivate.Activate();

    Cursor.Current = Cursors.Default;

    return formToActivate;
}

这将创建表单子项(如果尚未创建),并在创建时激活它。

示例:ActivateForm<dlgChildOne>();