Mein Programm zeichnet sich stark durch eine Winform aus. Während der Zeichnung reagiert die Winform nicht. Wie reagiere ich auf meine Maus? Ich möchte einen anderen Thread verwenden, um zu der Winform zu zeichnen, aber ich fürchte, ich werde den berüchtigten Cross-Threads-Access-Controll-Fehler treffen.Wie man ein Winform reagiert, während ein schweres Gemälde unterwegs ist
Antwort
ist hier ein großer MSDN-Artikel, die Ihnen helfen: Give Your .NET-based Application a Fast and Responsive UI with Multiple Thread
Wenn ich ähnliche Probleme konfrontiert war, ist es mir sehr viel geholfen, zu verstehen, was zu tun ist.
Sie können auch einen Blick auf Parallel Programming in .NET Framework 4 werfen. Diese Serie enthält auch eine Strategie mit Berechnungen, die auf mehrere synchronisierte Threads verteilt sind und alle sofort einsatzbereite .NET-Sammlungen verwenden. Dies ist nicht so kompliziert wie es klingen mag. Probieren Sie es einfach aus. :-)
Auch, wenn Sie die Chance haben, die anstehenden .NET-Erweiterungen zu nutzen, wäre es wert Asynchronous Programming with Async and Await
Sie können die Klasse BackgroundWorker
verwenden, um Ihre Winform ansprechend zu halten. MSDN.
Das Problem ist, wenn Sie ausführen UI Sachen zu versuchen. Sie müssen dazu in den UI-Thread zurückkehren. Alles, was ich empfehlen kann, ist, etwas zu zeichnen, den UI-Thread Ereignisse verarbeiten zu lassen, ein wenig zu zeichnen.
Das ist wahrscheinlich der beste Weg, um, aber es ist nicht ... Far zu tun einfach weniger einfacher als nur in einem anderen Thread nicht UI Jobs laufen ...
Wenn das Problem ist + GDI Malerei Sie können alle tun Ihre Zeichnung auf einer separaten Bitmap in einem separaten Thread (anstatt direkt auf den Bildschirm zu zeichnen) - und wenn Sie fertig sind: Kopieren Sie die gesamte Bitmap auf das Formular.
- 1. Wie man ein WPF-Fenster reagiert
- 2. unterwegs ist - nur 3 Dateien
- 3. Wie man Bild reagiert
- 4. Verfolgen, ob ein Benutzer ein bestimmtes "Wort" in einem WinForm
- 5. Warum ist Peer-to-Peer-Programmierung ein schweres Thema, um gute Forschungsergebnisse zu erhalten?
- 6. WinForm Anwendung UI Hangs während lang andauernde Operation
- 7. Wie hat ein Link-Tag auf Mobilgeräten anders reagiert?
- 8. Winform verschiebe ein Bild in eine Picturebox
- 9. Schweres Speicherleck mit Django
- 10. Wie man einen Akkord reagiert
- 11. Schweres und leichtgewichtiges Gewinde
- 12. Ist es möglich, ein NP-schweres Problem mit heuristischer und mathematischer Programmierung zu lösen?
- 13. Während der Verarbeitung ist ein Fehler aufgetreten.
- 14. wie man folgende div reagiert
- 15. Wie reagiert man auf Property Geändert von einem benutzerdefinierten winform-Steuerelement zur Entwurfszeit
- 16. Wie man einreihige Fußzeile reagiert
- 17. Wie überprüft man, ob ein Zeichen ein Apostroph ist?
- 18. Wie überprüft man, ob ein Java-Zeichen ein Währungssymbol ist
- 19. C - Wie überprüft man, ob ein Prozess ein Systemprozess ist?
- 20. Wie erkennt man, ob ein Datei-Handle ein Socket ist?
- 21. Wie überprüft man, ob ein Wort ein Palindrom ist?
- 22. Wie verhindert man, dass ein UIWindow ein Schlüsselfenster ist?
- 23. Wie fügt man Wörterbucheinträge während einer Schleife in jsonarray ein?
- 24. Wie man ein Formular "neu laden"?
- 25. XSLT, wie erkennt man ein anderes Muster während der Transformation?
- 26. ColdFusion 8.01 reagiert nicht ... Wie untersucht man, was los ist?
- 27. Wie man etwas macht, während ein Prozess läuft Unity3d
- 28. Wie man Code in Winform konvertiert?
- 29. löschen, während ein Wörterbuch iterieren
- 30. Wie Knopf in NSWindow anklickbar, während ein Blatt darüber ist
In welcher Weise zeichnet es? Ist es mit GDI + zu malen oder ist das Neuanordnen/Erstellen von (Benutzer-) Steuerelementen? –
Ich verwende das System.Drawing.Graphics, also sollte es GDI + sein. – smwikipedia