Как открыть форму Windows с помощью mdiParent в методе таймера? - PullRequest
0 голосов
/ 19 октября 2018

У меня есть MainForm и метод, который открывает новое окно:

private void OpenWindow(object source, ElapsedEventArgs e)
{
    var form = new SomeForm();
    form.MdiParent = this;
    form.Show();
}

И таймер:

System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(OpenWindow);
timer.Interval = 10000;
timer.Enabled = true;

И выдает ошибку при установке MdiParent: form.MdiParent = this;

Операция с несколькими потоками недопустима: элемент управления 'MainForm' доступен из потока, отличного от потока, в котором он был создан.

Как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы можете использовать один из других таймеров, потому что они по-разному обрабатывают потоки.

Объяснено здесь: Почему в .NET есть 5 версий классов таймеров?

0 голосов
/ 19 октября 2018

Основываясь на статье Threading Model , я думаю, что это должно работать в вашем казино:

var form = new SomeForm();
if (form.InvokeRequired)
{
    form.Invoke(new MethodInvoker(delegate {
    form.MdiParent = this;
    }));
}
form.Show();

Или вот так:

Invoke(new Action(() =>
{
    form.MdiParent = this;
    form.Show();
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...