코드에 이벤트 처리기를 추가하고 SystemHTA 클래스의 CollectionViewSources에 대한 모든 액세스를 끊었습니다. "다른 스레드가이 스레드를 소유하고 있기 때문에 호출하는 스레드는이 개체에 액세스 할 수 없습니다." 내 클래스는 "this.systemHTA = new SystemHTA();" DeviceManager_StateChanged() 함수 외부에 배치되었습니다.WPF 응용 프로그램에서 여러 스레드 간의 통신
public partial class MainWindow : Window
{
private DeviceManager DeviceManager = DeviceManager.Instance;
public SystemHTA systemHTA;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DeviceManager.StateChanged += new EventHandler<DeviceManagerStateChangedEventArgs>(DeviceManager_StateChanged);
DeviceManager.Initialize();
}
void DeviceManager_StateChanged(object sender, DeviceManagerStateChangedEventArgs e)
{
if (e.State == DeviceManagerState.Operational)
{
this.systemHTA = new SystemHTA();
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
this.systemHTA.GetViewSourceTest();
}
}
public class SystemHTA
{
private CollectionViewSource _deviceTestSource;
public SystemHTA()
{
_deviceTestSource = new CollectionViewSource();
_deviceTestSource.Source = CreateLoadData<HWController>.ControllerCollection;
}
public void GetViewSourceTest()
{
ListCollectionView view = (ListCollectionView)_deviceTestSource.View; //This creates an error saying a thread already owns _deviceTestSource
}
}
ObservableCollection으로 CollectionViewSource를 교체하면 모든 것이 정상적으로 작동합니다. 나를 올바른 방향으로 가리켜 주셔서 감사합니다. – Robert