Как получить доступ к потоку пользовательского интерфейса для моего подписчика WCF? - PullRequest
4 голосов
/ 21 ноября 2011

В настоящее время я занимаюсь разработкой службы подписки WCF. Подписчик является приложением winform. Поскольку подписчик должен реализовать метод обратного вызова для службы, который в моем случае является методом PostReceived (), а у издателя есть метод PublishPost ().

Для метода PostReceived () для моей winform он не может получить доступ к потоку пользовательского интерфейса моей winform. Метод подписки сделан на моем основном методе. Как мне запрограммировать мой метод PostReceived () таким образом, чтобы он мог обращаться к меткам и тому подобному из моей mainForm?

EDIT

То, что я пробовал до сих пор, - это вызов объекта mainForm из моего program.cs, но он вылетает, когда я запускаю все 3, сообщая об ошибке, что он не может получить доступ к потоку пользовательского интерфейса.

РЕДАКТИРОВАТЬ 2

Я пытался использовать следующий код, но для него есть ошибка.

mainForm b;   
public void PostReceived(string postSampleData)
    {
        b.BeginInvoke((MethodInvoker)delegate()
        {
            b.lblSearch.Text = "lakjslkaja";
        });

После запуска кода возникает ошибка

Object reference not set to an instance of an object.

Есть идеи как это исправить?

1 Ответ

4 голосов
/ 21 ноября 2011

Ваш метод PostReceived должен выглядеть примерно так:

void PostReceived()
        {
            yourform.BeginInvoke((MethodInvoker)delegate()
                {
                    yourform.button.Text = "new label";
                    //More stuff here
                });
        }

Это гарантирует, что все вещи после BeginInvoke будут вызваны в потоке пользовательского интерфейса.

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