Startseite > Newsgroups > dotnetpro.public.programming > Thema "WinForm neu zeichnen / aufbauen - Double Buffer"

Thema "WinForm neu zeichnen / aufbauen - Double Buffer"

ThemaAutorDatum
WinForm neu zeichnen / aufbauen - Double Buffer rene wack 27.01.2010 12:37
» Re: WinForm neu zeichnen / aufbauen - Double Buffer Michael Reukauff 28.01.2010 08:29

WinForm neu zeichnen / aufbauen - Double Buffer

27.01.2010 12:37

rene wack
Benutzer,
Abonnent

Antworten

Hallo dotnetpro Leser,

bei mir kommt es immer wieder vor, dass die WinForm nicht neu "gezeichnet wird, wenn das Programm einen längeren Prozess ausführt.

Gerade will ich über 10.000 E-Mails versenden.
Das senden läuft über mehrere Stunden.

Nach einer gewissen Zeit, wenn ich auf ein andere Programm gewechselt habe und wieder zurückwechseln will, wird die WinForm nicht neu gezeichnet / aufgebaut.
Stattdessen ist der Bildschirm an dieser Stelle schwarz, oder es sind nur die Umrisse des Programms zu sehen.

Ich habe schon folgenden Code eingebaut um das Problem zu lösen, leider mit wenig Erfolg.

Public Sub New()

' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
InitializeComponent()

Me.SetStyle(ControlStyles.UserPaint, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.SetStyle(ControlStyles.DoubleBuffer, True)
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.

End Sub

Wann kommt dieser Fehler vor:

- Nur bei lang laufenden Prozessen
- Ich denke wenn sich der Bildschirmschoner oder die Monitor Energieverwaltung eingeschaltet hat.


Andere Programme z.B. Word können ihre Formulare neu zeichne / aufbauen.

Frage:
Was kann man machen?
Da mein Programm schon aus über 100 Formularen und eigenen Steuerelementen besteht, bin ich auch an einer Lösung interessiert, die ich nicht für jedes Formular / Steuerelement einzeln implementieren muss, sondern am besten für alle Formulare des Projects / die von der .exe aufgerufen werden.
Oder man kann es zentral von dem .exe Project steuern.


Besten Dank,

Rene

 
 

Re: WinForm neu zeichnen / aufbauen - Double Buffer

28.01.2010 08:29

Michael Reukauff

Antworten


Hallo Rene
Das liegt daran, dass der Hauptthread damit beschäftigt ist die Mails zu
versenden und die Messagequeue der Applikation nicht mehr abgearbeitet wird.
Es gibt da jetzt 2 Möglichkeiten:
1.) verlagere das Senden der Mails in einen Backgroundworker-Thread
2.) Rufe mal immer wieder Application.DoEvents() auf
Tschüss erst mal
Michael
"rene wack" wrote in message
news:fd0b0a6a-da2f-4ec5-840d-ffa5fa1af39b@news.dotnetpro.de...
> Hallo dotnetpro Leser,
>
> bei mir kommt es immer wieder vor, dass die WinForm nicht neu "gezeichnet
> wird, wenn das Programm einen längeren Prozess ausführt.
>
> Gerade will ich über 10.000 E-Mails versenden.
> Das senden läuft über mehrere Stunden.
>
> Nach einer gewissen Zeit, wenn ich auf ein andere Programm gewechselt habe
> und wieder zurückwechseln will, wird die WinForm nicht neu gezeichnet /
> aufgebaut.
> Stattdessen ist der Bildschirm an dieser Stelle schwarz, oder es sind nur
> die Umrisse des Programms zu sehen.
>
> Ich habe schon folgenden Code eingebaut um das Problem zu lösen, leider
> mit wenig Erfolg.
>
> Public Sub New()
>
> ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
> InitializeComponent()
>
> Me.SetStyle(ControlStyles.UserPaint, True)
> Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
> Me.SetStyle(ControlStyles.DoubleBuffer, True)
> ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf
> hinzu.
>
> End Sub
>
> Wann kommt dieser Fehler vor:
>
> - Nur bei lang laufenden Prozessen
> - Ich denke wenn sich der Bildschirmschoner oder die Monitor
> Energieverwaltung eingeschaltet hat.
>
>
> Andere Programme z.B. Word können ihre Formulare neu zeichne / aufbauen.
>
> Frage:
> Was kann man machen?
> Da mein Programm schon aus über 100 Formularen und eigenen Steuerelementen
> besteht, bin ich auch an einer Lösung interessiert, die ich nicht für
> jedes Formular / Steuerelement einzeln implementieren muss, sondern am
> besten für alle Formulare des Projects / die von der .exe aufgerufen
> werden.
> Oder man kann es zentral von dem .exe Project steuern.
>
>
> Besten Dank,
>
> Rene
>

Login
Sie sind nicht eingeloggt.

Login & Registrierung
Abo bestellen





Developer Week Special

dotnetpro präsentiert die Developer Week vom 24. – 27. Juni 2013 im NCC Ost, Nürnberg – eine der größten Konferenzen ganz Europas für Entwickler

Anzeige





Newsletter
Tragen Sie Ihre E-Mailadresse für den kostenlosen Newsletter von dotnetpro ein.


Umfrage
Würden Sie auf die Walz gehen?





Ergebnis anzeigen