Как узнать, открыто ли приложение формы или нет c # - PullRequest
0 голосов
/ 18 марта 2010

Кто-нибудь знает, как я могу узнать, открыто ли приложение Windows Form (C #) или клиент закрыл его?
(В моем приложении есть приложение Windows Form (Form1), которое позволяет пользователю открывать другие формы (Form2). Я хочу знать, открыта ли Form2 или закрыта.)
Мне нужно это знать, потому что я запускаю Form2 из потока и хочу, чтобы поток работал до тех пор, пока пользователь не закроет Form2.
Большое спасибо!

Ответы [ 4 ]

3 голосов
/ 18 марта 2010

Вы можете проверить, открыта ли форма данного типа в вашем приложении, например, (используя LINQ):

if (Application.OpenForms.OfType<Form2>().Count() > 0)
{
    // there is an instance of Form2 loaded
}
0 голосов
/ 18 марта 2010

Если вы имеете в виду 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>();

0 голосов
/ 18 марта 2010

Если вы хотите запустить только один экземпляр приложения, отметьте эту ссылку.
Там вы также увидите, как проверить, активен ли процесс.

0 голосов
/ 18 марта 2010

Вам нужно уточнить ваш вопрос немного подробнее. Вы говорите о мониторинге приложения из другого приложения? Или что одна форма должна знать, открыта ли другая? Или форма должна знать, когда закрывается другая форма?

Существует несколько способов отслеживать закрытие форм в одном приложении.

Вызов ShowDialog() в вашей форме вместо Show() гарантирует, что код после вызова ShowDialog() не будет выполнен до тех пор, пока пользователь не закроет форму.

Класс Form имеет свойство Visible, которое возвращает значение true / false в зависимости от того, является ли форма видимой или нет.

Что касается самого приложения, в статическом классе Application есть событие ApplicationExit, которое вызывается непосредственно перед закрытием приложения, чтобы вы могли прослушивать это событие, если, например, вам необходимо выполнить некоторую очистку. на выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...