У меня есть клиент WinForms с 2 формами.Первая форма вызывает отдельный класс, использует SignalR для уведомлений из WebApi.Настройка прокси-сервера-концентратора для определенного сообщения в классе:
onResult = myProxy.On<int>("Result", (id) =>
{
Result?.Invoke(this, new ResultEventArgs(id));
});
В первой форме я подписываюсь на событие Result
, а затем у меня есть:
private void OnResult(object sender, ResultEventArgs e)
{
using (var form = new SecondForm(e))
{
var dialogResult = form.ShowDialog(this);
if (dialogResult == DialogResult.Cancel)
return;
}
}
Я получаю CrossThreadException
var dialogResult = form.ShowDialog(this);
Первая форма (this
) открывается в потоке пользовательского интерфейса.Вторая форма открывается в том же потоке, что и класс SignalR
.
Мне нужно открыть вторую форму, используя ShowDialog(this)
, так как мне нужно, чтобы она была самой верхней формой в приложении.
Есть ли решение этой проблемы?Можно ли также открыть вторую форму в потоке пользовательского интерфейса?
ОБНОВЛЕНИЕ:
Обходной путь, который работает:
form.TopMost = true;
form.StartPosition = FormStartPosition.CenterScreen;
Единственным недостатком является то, что форма является самой верхней формой на рабочем столе, а не только в приложении.