Как показать окна из метода обратного вызова SignalR?

Я работаю над простым чат-приложением, которое использует SignalR для общения. Я хочу показывать MessageForm всякий раз, когда личное сообщение получено от другого пользователя. Проблема в том, что метод обратного вызова работает в другом потоке, и кажется, что есть проблема с объединением нового цикла формы с основной формой, поэтому приложение зависает. Вот мой метод обратного вызова:

private void MessageReceived(object sender, Client.MessageEventArgs args)
    {
        var form = new MessageForm();
        form.MessageReceived(sender,args);
        form.Show();
    }

Итак, вопрос в том, как я могу создать форму, чтобы она использовала основной цикл формы?


person Beatles1692    schedule 31.10.2012    source источник


Ответы (1)


ОК, я нашел ответ :) Я был немного сбит с толку, потому что использовал метод from.Invoke для запуска метода show, и, очевидно, это не сработало, потому что форма была создана в потоке обратного вызова, тогда я использовал основной из Invoke метод и альт, он работает как шарм :) Вот код:

private void MessageReceived(object sender, Client.MessageEventArgs args)
    {

        var form = new MessageForm();
        form.MessageReceived(sender,args);
        Invoke(new Action(form.Show));
    }
person Beatles1692    schedule 31.10.2012