Toon posts:

[Visual Basic .Net] Form bevriest bij uitvoeren van een code

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik ben bezig met het schrijven van een programma in Visual Basic .net 2005 Express editie. Nu heb ik een functie geschreven waarmee ik een complete folder met bijbehorende subfolders kan kopieren naar een andere folder. Het probleem is echter dat zodra ik deze functie aanroep het form bevriesd. Ik kan dus niet meer op knopjes drukken of iets doen. Het hele programma loopt vast totdat hij klaar is met kopieren. Heeft iemand een idee hoe ik dit voorkom. Ik heb nu een public function geschreven in een module die ik aanroep in het hoofd form. Ik heb ook al geprobeerd met een classe te werken maar dat gaf hetzelfde probleem. Ik ben pas een beginner in het programmeren.

Alvast bedankt.. :)

Roland

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 11:24
Kijk eens naar threads

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 22-02 15:12

Swerfer

Hmm...

Je zou eens moeten zoeken met vb.net multithreading in google.

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Dat komt omdat je applicatie volledig bezig is met het kopieëren van die files en folders, en geen tijd heeft om op andere dingen te reageren.
Je kan dit oplossen door het kopieëren op een asynchrone manier uit te voeren. Hiervoor kan je gebruik maken van Threads, maar aangezien je nog maar een beginner bent in het programmeren, moet je wel de 'pitfalls' hiervan kennen. (race conditions, locking, geen UI-elementen direct benaderen vanuit een thread, ... ).
Om het op een makkelijke manier te doen, kan je eens kijken naar de BackgroundWorker class in .NET. Hiermee kan je een taak op een andere thread laten uitvoeren.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ok bedankt.. zal eens opzoek gaan naar meer info over Threads in visual basic. Bedankt dat jullie mij op de goede weg hebben geholpen! :)

Verwijderd

Zoals whoami zegt is een hele simpele methode om je probleem op te lossen de backgroundworker control. Deze control is te vinden in de toolbox.

Je gooit een backgroundworker in het Form dat niet mag bevriezen en dan voeg je deze code toe:

code:
1
2
3
4
5
6
7
8
9
10
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

'Je code komt dan hier te staan

    End Sub

    Private Sub StartCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartCopy.Click

        BackgroundWorker1.RunWorkerAsync()
    End Sub


Het is daarnaast ook nog mogelijk om de voortgang van de backgroundworker bv. in een progressbar weer te geven.

Verwijderd

Topicstarter
Super bedankt. Die backgroundworker werkt perfect! :P Thanks!!
Pagina: 1