So starten Sie einen UI-Thread in C #

8

Ich weiß, dass ich einen neuen Arbeitsthread mit .NET starten kann. Aber wie starte ich einen neuen UI-Thread (wie in MFC)?

Es macht mir nichts aus, wenn die Lösung nur auf Windows-Boxen beschränkt ist; Ich möchte auch, dass die Lösung rein .NET ist - kein p / ruft CreateThread, etc.

Jede Eingabe wird geschätzt.

    
Filip Frącz 13.04.2009, 19:24
quelle

4 Antworten

24

Verwenden Sie Application.Run - es startet eine Nachricht Schleife im aktuellen Thread. Es gibt Überladungen, die zu Beginn mit einem Formular beginnen, oder einen Anwendungskontext oder keines von beiden. (Wenn Sie dies für einen neuen -Thread tun möchten, müssen Sie den Thread erstellen und auf die normale Weise starten und Application.Run aufrufen.)

    
Jon Skeet 13.04.2009, 19:26
quelle
4

Wenn Sie WPF verwenden möchten, lesen Sie den MSDN-Artikel WPF-Threading-Modell in insbesondere der Abschnitt "Mehrere Windows, mehrere Threads". Es beschreibt, was Sie tun müssen, um einen neuen Dispatcher zu erstellen und ein Fenster für einen neuen Thread anzuzeigen.

    
Erich Mirabal 13.04.2009 19:38
quelle
2

Wenn Sie einen neuen Thread erstellen möchten, der Window-Handles erstellen und bearbeiten kann, können Sie die Funktion SetApartmentState für das Thread-Objekt verwenden und sie auf STA setzen. Sie müssen wahrscheinlich auch Application.Run in der Methode für diesen Thread aufrufen, um Ihre Nachrichtenschleife zu erstellen. Beachten Sie jedoch, dass Sie den gleichen Cross-Threading-No-No's unterliegen, die Sie in einem anderen Thread haben (dh Sie können nur mit dem Handle interagieren, um ein Steuerelement für den Thread zu erstellen, in dem es erstellt wurde) Sie können auf Ihrem anderen UI-Thread nichts tun, ohne den Kontext zu wechseln.

    
Adam Robinson 13.04.2009 19:31
quelle
0

Auch Sie können dies tun:

%Vor%     
galets 13.04.2009 19:40
quelle