was ist die Funktion, die ich stattdessen verwenden können von Veranstaltungen (in vb6.0) in (vb2010)
for a=0 to 1000
lable.text=a
next
oben Schleife aktualisiert nicht die text-status-lable, während die Schleife ausgeführt wird, aktualisiert er nur am Ende der for-Schleife, aber ich habe versucht, mit vb6.0 ist es möglich, durch die Verwendung von Veranstaltungen.
aber ich weiß nicht, was ist die Funktion in vb2010 beta 2.
plz mir helfen, dieses problem zu lösen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen,
- Anwendung.DoEvents()
Oder sogar
lable.Refresh()
Müssen Sie ändern die Art und Weise denken Sie über diese Art von problem .NET - DoEvents-war ein hack auf den Umgang mit den fehlenden Durchzug im VB, nützlich, aber nicht für eine gute Lösung.
Laufen ein Prozessor-intensive Aufgabe, während der UI-responsive müssen Sie die Verwendung von multi-threading, Sie kick-off der intensiven Arbeit in einem separaten thread und die Aktualisierung der Benutzeroberfläche in der Haupt-thread.
Einfachste Weg, dies zu tun ist mithilfe der BackgroundWorker-Klasse http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(VS.100).aspx
Ihre Schleife erhöhen würde ReportProgress Ereignisse, die Ihre UI-code zum aktualisieren der Beschriftung.
Können Sie
Application.DoEvents()
im .Net - aber man sollte das wohl nicht. Es kann dazu führen, alle Arten von seltsamen Verhalten, dass wird ein Alptraum sein, zu Debuggen. Ich habe gesehen, Schaltfläche OnClick-Ereignis auslösen, wenn die Schaltfläche deaktiviert ist (als Beispiel) und schließlich verfolgt es zurück zum Aufruf von DoEvents().Wenn es Ihr Ziel ist wirklich nur zu zählen, und aktualisieren Sie ein label - use-ein
Timer
.Wenn Sie dabei sind, eine sinnvolle Arbeit - Sie in Aussehen sollte multithreading.
Den
BackgroundWorker
Klasse macht dies verdammt einfach haben, können Sie die Fortschritte und aktualisieren Sie Ihre Kontrolle. Wenn Sie nicht verwenden eine alte version des .NET Framework, die Sie verwenden können, eineTask
als gut.Nachdem alles gesagt, dass - egal, was Ansatz, den Sie nehmen - Sie werden nicht in der Lage zu sehen, viel von etwas in einer Schleife, wie Sie schon in deinem Beispiel. Es wird einfach passieren, zu schnell (es sei denn, Sie verwenden Sie einen timer und setzen Sie den Tick-Wert entsprechend).
Beispiel Mit einem Timer
Der einfachste Weg dies zu tun ist in den Formular-Designer ziehen Sie eine Timer-Komponente (unter den Komponenten-Gruppe) auf Ihrem Formular. Sie können die Eigenschaften Bearbeiten, und geben Sie ihm einen passenden Namen und legen Sie den Tick-Wert zu etwas wie 500 (das ist das tick-Intervall in Millisekunden). Setzen Sie den Wert Enabled auf True.
Nun klicken Sie auf das Timer-Steuerelement, und ziehen Sie das Fenster Eigenschaften. Klicken Sie auf das Symbol Ereignisse, und doppelklicken klicken Sie auf die
Tick
Textbox. Dies sollte die Standard-handler für Sie.Ändern Sie den code wie folgt Aussehen:
Ihre Frage ist nicht ganz klar, aber ich werde versuchen zu erklären, was ich verstanden habe. Die Schleife eigentlich updates, aber es passiert so schnell, dass man immer nur den letzten Wert. Ich weiß nicht, die VB-equilevant von
sleep()
Methode, aber Sie sollten in der Lage sein zu finden, die es im web ziemlich schnell.Ist es nicht der text ist nicht immer verändert, aber immer überschrieben, wenn Sie die Schleife, die Sie jedes mal. Wenn Sie möchten, zur Anzeige von 0 bis 1000 in der Bezeichnung haben, dann müssen Sie fügen Sie den Wert.