建立 Winform Aspnetcore Signalr Client

首先要使用 .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;

這代表不檢查控制項的安全執行緒呼叫,如此,就可以正確執行。

有問題嗎?歡迎一起討論喔!