Доступ к основному потоку с помощью обратного вызова - PullRequest
1 голос
/ 13 февраля 2009

У меня есть программа на C #, которая подключается к серверу с помощью DuplexChannelFactory, и этот сервер может вызывать методы со стороны клиента посредством обратного вызова, проблема в том, что я понятия не имею, как получить доступ к основному потоку, из которого было создано соединение методы обратного вызова. Есть ли способ сделать это, передав объект, или мне нужно реализовать дополнительный коммуникационный уровень (BD, файлы и т. Д.)?

Надеюсь, это не сильно смутило.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2009

По какой причине вы хотите получить доступ к основному потоку? Вам нужно обновить пользовательский интерфейс, и это можно сделать только в главном потоке?

В этом случае посмотрите System.Windows.Forms.Control.Invoke, который может поставить в очередь делегат, который будет выполнен в потоке пользовательского интерфейса.

0 голосов
/ 13 февраля 2009

Я не уверен, что полностью понимаю ваш вопрос, но я попробую:

Мое понимание вопроса:

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

Я вижу несколько вариантов здесь, в зависимости от характера состояния, которым вы пытаетесь поделиться.

1) Если состояние, которым вы пытаетесь поделиться, не вращается (то есть IE, если оно известно, когда вы делаете запрос) и не очень велико, я думаю, что наиболее разумным вариантом было бы передать это состояние вместе с вызовом веб-службы, чтобы сервер мог передать его обратно обратному вызову.

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

3) Если состояние не вращается, но оно велико, вы можете рассмотреть вопрос о предварительном вычислении запроса сервера перед отправкой первоначального запроса.

Существует множество техник, которых очень мало, но в вопросе недостаточно информации, чтобы дать хороший ответ.

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