多執行緒是程式設計中極具威力的概念,能將耗時、資源密集的背景工作拆分至獨立執行緒,保持使用者介面(UI)流暢回應。預設下 Web Service 呼叫屬於阻塞式,呼叫端需等待回傳才能繼續,若服務回應緩慢會嚴重拖累客戶端效能。本文示範如何以非同步方式呼叫 Web Service,並在 Windows Forms 應用程式中結合 Chart FX 元件繪製即時股票走勢圖。
於 Visual Studio .NET 2003 建立名為 StockWS 的 Web Service 專案,包含一個 getPrice(string stock) 方法,傳入股票代碼回傳隨機價格(0~100),模擬真實報價服務:
Public Function getPrice(ByVal stock As String) As Single
Return Rnd() * 100
End Function
實務上可替換為真實資料來源。
Stock Quote,加入 StockWS 的 Web 參考。Form1 放置 Chart、ComboBox(選股票)、Button(啟動查詢)三個控制項。
圖 1:方案總管結構
圖 2:工具箱中的 Chart 元件
圖 3:主視窗佈局
按鈕點擊事件中啟動背景執行緒(或使用 BeginInvoke)呼叫 Web Service,取得資料後再透過 Invoke 回主執行緒更新 Chart 資料源,即可在不凍結 UI 的情況下即時繪圖。完整程式碼請參考範例專案。
掌握此模式,即可輕鬆構建各類即時監控、資料視覺化的桌面應用。