В моем приложении у меня есть 2 концентратора (и я использую 2 отдельных соединения). Один хаб и его соединение создаются внутри класса. Другой из формы.
В первом прокси я делаю:
var uiTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext()
workProxy.On("DoWork", () =>
{
Task.Factory.StartNew(() =>
{
OnDoWork?.Invoke(this, new EventArgs());
},
CancellationToken.None, TaskCreationOptions.None, uiTaskScheduler);
});
Я делаю выше, потому что я открываю форму в On
, и если я не делаю выше, я получаю исключение между потоками.
Вторая форма подписывается на событие OnDoWork, которое, в свою очередь, открывает фактическую форму с подключением к концентратору и прокси.
В событии формы OnShown
, которое я делаю:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
hubConnection = new HubConnection("myhubsurl");
hubProxy = hubConnection.CreateHubProxy("SecondHub");
doWork = hubProxy.On<IEnumerable<Item>>("DoWork", items => WorkOnItems(items));
hubConnection.Start().Wait();
}
Форма может быть открыта напрямую, без вызова с первого прокси. В этой ситуации все отлично работает. Однако, когда я открываю форму из первого прокси, приложение зависает в этой строке:
hubConnection.Start () Подождите ();.
Проблема в том, что я запускаю второе соединение в форме, которая открывается внутри задачи? Есть ли решение этой проблемы?