Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 23:46

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB] Programm wird zu schnell ausgeführt?

Discussion on [VB] Programm wird zu schnell ausgeführt? within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
[VB] Programm wird zu schnell ausgeführt?

Hi,

da ich noch Anfäger bin in VB hab ich mir einen Dateisortierer gebastelt.

Nun, wird das Label " lbl_verbleibende_dateien" immer sofort auf 0 gesetzt und das Label "lbl_datei" ist immer "?". Wenn ich ne msgbox() vor "next" mache, dann wird alles perfekt angezeigt.

MfG Ludder231
Ludder231 is offline  
Old 11/11/2012, 20:42   #2
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
mach halt an ne stelle irgendwo nen 100ms wait oder so dann siehste obs durchläuft
tolio is offline  
Old 11/11/2012, 20:53   #3
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Quote:
Originally Posted by tolio View Post
mach halt an ne stelle irgendwo nen 100ms wait oder so dann siehste obs durchläuft
Und wie mach ich ne Wait ?
Ich habs jz mit thread.sleep() gemacht, aber die labels bleiben immernoch leer.
Ludder231 is offline  
Old 11/11/2012, 21:03   #4
 
elite*gold: 0
Join Date: Jul 2012
Posts: 284
Received Thanks: 127
Application.DoEvents muss da rein, damit der das GUI updaten kann...
3Angle is offline  
Thanks
1 User
Old 11/11/2012, 21:06   #5
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Ah danke, wusste ich nicht dass die nicht updaten können.
Ludder231 is offline  
Old 11/11/2012, 22:24   #6
 
Mi4uric3's Avatar
 
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
Quote:
Originally Posted by Ludder231 View Post
Ah danke, wusste ich nicht dass die nicht updaten können.
Ist halt im selben Thread wie das Malen des GUIs. Und wenn der Thread dann grade mit deinem Code zugange ist kann er nicht gleichzeitig das GUI updaten
Dafür das "DoEvents()", das ruft zwanghaft die Interaktion mit dem GUI auf.
Mi4uric3 is offline  
Thanks
1 User
Old 11/11/2012, 23:37   #7
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
google -> "vb.net wait" -> erstes ergebniss ist eine methode die solange die zu wartende zeit nicht abgelaufen ist nur das gui aktualisiert => geeignet für das was du machen willst
tolio is offline  
Old 11/11/2012, 23:44   #8
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
DoEvents() ist böse :<
Würde es dir nicht raten zu benutzen
Kraizy​ is offline  
Old 11/12/2012, 01:14   #9
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
hier in dem fall um nur eine anzeige aktualisierung zu veranschaulichen ist doevents genau das richtige
tolio is offline  
Old 11/12/2012, 12:11   #10
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
DoEvents sollte am besten immer vermieden werden. Klar, es ist die einfachste und schnellste Möglichkeit für faule Programmierer, um Controls während einer Schleife oder sonst was zu aktualisieren, aber sicherlich keine schöne, zudem sogar noch ziemlich gefährlich für den Programmablauf. Selbst MS sagt, dass man diese Methode mit Bedacht nutzen sollte, wenn überhaupt:

Quote:
Vorsicht
Das Aufrufen dieser Methode bewirkt, dass der aktuelle Thread angehalten wird, während alle wartenden Fenstermeldungen verarbeitet werden.Wenn eine Meldung bewirkt, dass ein Ereignis ausgelöst wird, dann werden andere Bereiche des Anwendungscodes möglicherweise ausgeführt.Dies kann bewirken, dass die Anwendung unerwartete Verhaltensweisen zeigt, die schwierig zu debuggen sind.Wenn Sie Vorgänge oder Berechnungen ausführen, die eine lange Zeit brauchen, ist es oft vorzuziehen, jene Vorgänge auf einem neuen Thread auszuführen.Weitere Informationen über asynchrone Programmierung finden Sie unter .

Wie gesagt, am besten sollte man DoEvents immer vermeiden, und eine (bessere) Alternative suchen, denn die gibt es eigentlich immer. Um z.B. ein Label zu aktualisieren, reicht auch einfach ein extra dafür gemachtes Event aufzurufen: .Update() (oder ein anderes banales Beispiel: beim WebBrowser, statt DoEvents in einer While-Schleife aufzurufen (ja, das habe ich, besonders in diesem Forum, schon oft bei z.B. billigen YouTube Bots gesehen) und zu warten, bis die Seite geladen wurde, nutzt man einfach das extra dafür vorgesehene Event: .DocumentCompleted(). Und so gibt es eigentlich für alles eine "Alternative").

Am besten ist es jedoch sowieso, wenn man Arbeitsvorgänge, besonders diese, welche längere Zeit brauchen, komplett von der GUI trennt, indem man z.B. einen separaten Thread nutzt. Das Aktualisieren der Controls läuft dann über Invoke/Delegate.

Hier ist noch ein schöner Beitrag zu DoEvents, zwar auf Englisch, aber naja, sollte man als Programmierer sowieso können:
Gibt auch noch viel mehr Seiten, die die Nachteile von DoEvents aufzeigen, einfach mal danach googlen.
Kraizy​ is offline  
Thanks
3 Users
Reply


Similar Threads Similar Threads
DllMain wird nicht ausgeführt
04/30/2012 - C/C++ - 30 Replies
Hi, hab hier folgendes Problem, will MessageBoxW hooken, allerdings wird scheinbar DllMain nicht mal ausgeführt.. da denke ich jetzt versteh ich das Hooken einmal, dann scheitere ich schon am erstellen einer DLL xD Nach dem Injecten passiert einfach nichts o.0 Habs bei einem selbst erstellten Programm getestet, das in einem Endlosloop MessageBoxW aufruft. Verwende VS2010. Hab Win32 Project -> DLL ausgewählt (mit precompiled header). Hab jetzt echt keine Ahnung an was es scheitert. Bitte...
Screencapture wird schon beim start ausgeführt.
11/13/2011 - AutoIt - 3 Replies
Wie der Titel schon sagt macht mein momentanes Script schon ein Screenshot wenn ich es öffne, das soll aber so nicht sein. 1. Screenshot bei klicken auf Button 2. Screenshot bei drücken von F12 ( auch hidden ? ) 3. Oben nur ein Minimieren Knopf, im moment ist dort garnichts Script #include <WindowsConstants.au3> #include <ScreenCapture.au3> GUICreate ( "Premaiders Desktop Tool",310,270,-1,-1,$WS_CAPTION)
Der Audiodienst wird nicht ausgeführt
04/10/2011 - Technical Support - 19 Replies
Bei PC Tools Internet Security kam gerade eine Meldung, dass ein glaub verdächtiger Prozess läuft. Ich hab dann auf Quarantäne geklickt. Und plötzlich war mein Ton weg Oo ; und auch das rote Kreu über dem Lautsprecher (s.Bild). Habe Doppelklick draufgeklickt auf den Lautsprecher und dann kam das. (s.Bild) Ich dachte mir dann so, wenn ich es wieder aus der Quarantäne entferne geht es wieder und das rote Kreuz geht weg, aber nachdem ich es bei PC Tools Internet Security aus der Q....
wie kann ich eine exe in ein jpg verstecken und das durch kliken ausgeführt wird
05/06/2010 - General Coding - 7 Replies
wie kann ich eine exe in ein jpg verstecken und das durch kliken ausgeführt wird
wie kann ich eine exe in ein jpg verstecken und das durch kliken ausgeführt wird
04/26/2010 - Main - 7 Replies
wie kann ich eine exe in ein jpg verstecken und das durch kliken ausgeführt wird.



All times are GMT +1. The time now is 23:47.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.