WPF многопоточность. Смена интерфейса стороннего потока - PullRequest
1 голос
/ 07 февраля 2012

WPF C #. У меня есть метод, который связывает с другим методом. Сервер отправляет привет мир.

 var clientobj =
 (OperClass) Activator.GetObject
 (
 typeof (OperClass),
 "tcp :/ / localhost: 100001/TcpClient"
 );

clientobj.Update ("HELLO WORLD");

клиентское приложение:

public void Update (string msg)
{
     label1.text = msg; / / error thread
}

Программы используются для связи RemotingServices.Marshal. Как я могу изменить текст на label1. диспетчер не помогает.

1 Ответ

1 голос
/ 07 февраля 2012

Вы не можете получить доступ к элементам пользовательского интерфейса из потока, который не является потоком, в котором были созданы элементы пользовательского интерфейса.Чтобы преодолеть это, вам нужно будет вызвать то, что вам нужно, в потоке Dispatcher, в котором были созданы элементы пользовательского интерфейса.

Предполагая, что clientobj сам по себе является элементом пользовательского интерфейса (например,как Window или UserControl), то вы можете использовать следующий код:

public void Update (string msg)
{
    // See if we need to re-invoke on the Dispatcher thread
    if (!CheckAccess())
    {
        // Invoke on the Dispatcher thread
        this.Dispatcher.BeginInvoke(new Action<string>(Update), msg);

        // Exit from this method to prevent continued execution
        return;
    }

    // We are now running on the Dispatcher thread, so we can access the UI element(s) directly
    label1.Text = msg;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...