首先要使用 .net framework 4.6.1 或以上版本,主因在於 asp.net core signalr 最低要求支援環境(這裡是使用 .net standard library)。
其次,在 Winform 因為有執行序的問題,因此,在 console 的範例呼叫方式:
_hub.StartAsync().Wait();
ConnectToHub().Wait();
在 winform 上會變成沒有回應(因為在等待 Wait() 執行完畢)。
正確做法是透過 Task.Run() 產生新的執行序:
Task.Run(() =>
{
_hub.StartAsync().Wait();
ConnectToHub().Wait();
});
但此時又會有無法存取 UI thread 的 controls(例如 textBox);因此必須要在 Form intialized 時候,加入:
CheckForIllegalCrossThreadCalls = false;
這代表不檢查控制項的安全執行緒呼叫,如此,就可以正確執行。
有問題嗎?歡迎一起討論喔!