Autor Beitrag
cjoksch
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 16.09.14 13:18 
Hallo,
ich erprobe gerade meine Kenntnisse in C# und stosse schon an meine Grenzen.
Ich erstelle 2 Threads:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
ThreadStart bstart = delegate { GetItems(_textBlockOldInstallPath, "OLD"); };
Thread bThread = new Thread(new ThreadStart(bstart));
bThread.SetApartmentState(ApartmentState.STA);
bThread.Start();

ThreadStart astart = delegate { GetItems(_textBlockNewInstallPath, "NEW"); };
Thread aThread = new Thread(new ThreadStart(astart));
aThread.SetApartmentState(ApartmentState.STA);
aThread.Start();

danach möchte ich in ein anderes TabItem Wechseln was mit dem Fehler:
Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet.

Was muss ich da ändern ??

danke
Cay

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 16.09.14 15:27 
Hallo und :welcome:

wenn du WPF (und MVVM) verwendest, dann darfst du Zugriffe auf die UI nur aus dem Hauptthread (GUI-Thread) heraus durchführen.

Um Zugriffe auf UI-Elemente aus Threads heraus zu ermöglichen, gibt es die Dispatcher-Klasse und dessen BeginInvoke bzw. Invoke-Aufrufe, s.a. den Beitrag (sowie den dortigen Link) WPF User Control aus einem Thread an den Hauptthread binden.

Btw: Statt eigener Threads solltest du besser die in .NET 4.0 eingeführte Task-Klasse bzw. die ab .NET 4.5 neuen Schlüsselwörter async und await verwenden, s.a. meinen Beitrag (sowie den Anhang) Threading - Threadsicherheit - Dictonary<T1,T2> - .NET 4.0

Für diesen Beitrag haben gedankt: cjoksch
cjoksch Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 16.09.14 16:55 
Hallo,
danke für die Info werde ich mich morgen gleich mit auseinandersetzen.

danke
Cay