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)); }));