J'ai ajouté un gestionnaire d'événement à mon code et il a brisé tous les accès à CollectionViewSources dans la classe SystemHTA en disant "Le thread appelant ne peut pas accéder à cet objet car un thread différent le possède". Ma classe fonctionnait quand "this.systemHTA = new SystemHTA();" a été placé en dehors de la fonction DeviceManager_StateChanged().Thread Locking CollectionViewSource
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
}
}
Je suis toujours complètement déconcerté comme comment faire cela. – Robert
Je peux imaginer que (-:, voici un lien un peu plus facile, mais continuez à googler: http://msdn.microsoft.com/fr-fr/magazine/cc163328.aspx –