【发布时间】:2019-01-13 17:04:56
【问题描述】:
在我的应用程序中,我有 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().Wait();
问题是因为我在任务中打开的表单中启动第二个连接吗?这个问题有解决办法吗?
【问题讨论】: