我的wpf應用程序通過通信管道連接到我的傳統應用程序。 WPF應用程序允許用戶使用界面上的按鈕繪製地圖上的位置。因此,當用戶單擊WPF應用程序用戶界面上的按鈕時,會向傳統應用程序發送管道消息,以允許用戶繪製地圖上的位置。當用戶使用鼠標在地圖上繪製位置時,使用雙向通信管道將座標發送回wpf應用程序。當我的wpf應用程序收到座標時,它需要相應地處理和執行工作流程。可能會出現一些錯誤,所以應用程序可能需要顯示錯誤消息。或者在某些情況下可能需要清除在應用程序主線程中創建的集合。所以有一個完整的代碼分支在接收到座標時被執行。在主線程中處理wpf應用程序中的呼叫
如何將我的WPF應用程序帶回到主線程,以便在收到座標時,可以執行用戶操作(如顯示消息框等)?
現在我收到異常像「收集是在不同的線程中創建的」。
我知道我可以使用此代碼顯示在主線程消息或明確集合
Application.Current.Dispatcher.Invoke((Action)(() => { PointsCollection.Clear(); }));
Application.Current.Dispatcher.Invoke((Action)(() => { MessageBox.Show("Error"); }));
但在單元測試中這不會工作,也是我將不得不爲此在很多地方。有沒有更好的辦法?
public void PipeClientMessageReceived(int type, string message)
{
var command = (PipeCommand)type;
switch (command)
{
case PipeCommand.Points:
{
string[] tokens = message.Split(':');
var x = Convert.ToDouble(tokens[0]);
var y = Convert.ToDouble(tokens[1]);
SetSlotCoordinates(new Point2D(x, y));
}
break;
}
}
SetSlotCoordinates方法實際上做所有的工作來處理座標。我試圖把這個調用放在Application.Current.Dispatcher中,但沒有成功。
Application.Current.Dispatcher.Invoke((Action)(() => { SetSlotCoordinates(new Point2D(x, y)); }));