Reageert niet...

Status
Niet open voor verdere reacties.

geertd

Gebruiker
Lid geworden
16 nov 2008
Berichten
340
Hallo allemaal,

ik heb mijn programma nu al ongeveer af :) !

Het enige probleem is dat mijn programma bewerkingen moet uitvoeren die vaak lang kunnen duren. Na ong. 10 seconden zet Windows "(reageert niet)" achter de naam van mijn programma. Wanneer ik dan op mijn programma klik vraagt 'ie of ik wil wachten tot het programma reageert, het programma wil sluiten, of een oplossing wil zoeken.

Hoe kan ik zorgen dat Windows mijn programma niet meer voor '(reageert niet)' aanziet?

Alvast bedankt,

Geert
 
Daarvoor heb je een BackGroundWorker control nodig.

Plaats er één op je form.
Zet dan deze regel in de sub die de lange taak in werking stelt:
Code:
BackGroundWorker1.RunWorkerAsync()

Verplaats de code waar de lange taak uit bestaat naar het DoWork event van de BGW control.

Onder het RunWorkerCompleted event kun je eventueel code plaatsten die bijvoorbeeld labels, textboxes weer terug zetten naar hun standaard waarde. Dit is optioneel, het ligt er maar net aan hoe je je programma hebt gemaakt.
 
In mijn BGW (bij DoWork) heb ik (onder andere) de code
Code:
Button1.Visible = True

Wanneer ik nu mijn programma uitvoer krijg ik deze foutmelding:

InvalidOperationException was unhandled by user code
Het is niet toegestaan een bewerking uit te voeren via verschillende threads: er werd vanaf een andere thread toegang gekregen tot het besturingselement dan de thread waarop het element is gemaakt.


Voordat ik de backgroudworker had gemaakt, dus toen de lange taak nog onder bijv. btn1_click stond deed deze fout zich helemaal niet voor.

Waar kan dit aan liggen?
 
Zet deze regel in dezelfde sub waar ook bgw.RunWorkerAsync() staat:

Code:
   CheckForIllegalCrossThreadCalls = False

Dan moet het werken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan