Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.Net] Functies in module != BackgroundWorker

Pagina: 1
Acties:

  • Satom
  • Registratie: Mei 2011
  • Laatst online: 26-10 22:27

Satom

Verzamel ervaringen

Topicstarter
Beste Tweakers,

Ik heb een probleem en gok dat het weer eens aan mijn programmeren ligt :9

Als ik een functie creëer en deze plaatst in een module (dus een aparte bestand), bijvoorbeeld document Kevin.vb en de functie Fietsen.

Als ik dan in een Button Click mijn functie aanroep zoals moet, Kevin.Fietsen() dan wordt dit netjes gecompileerd en uitgevoerd zoals gewenst.

Ga ik dit zelfde stukje code (Kevin.Fietsen()) in een Do_Work van een BackGroundWorker plaatsen, dan gebeurd en helemaal niets, zelfs Public variabelen in mijn Main worden niet ingevuld.. En ook geen foutmelding o.i.d.

Ligt dit nu specifiek aan de BackGroundWorker, of ligt het aan mij?.. Want alle functies in één document wordt wel veel, heb nu al een aantal #Regions gebruikt :X

  • Satom
  • Registratie: Mei 2011
  • Laatst online: 26-10 22:27

Satom

Verzamel ervaringen

Topicstarter
Probleem opgelost, net na het posten zat ik me te bedenken: "heb ik mijn variabelen wel goed aangemaakt?" Dus dit opnieuw bekeken en verandert van Public var as string; naar Public Shared var as string; en poeff.. het werkt :9

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Het werkt, maar het is niet de bedoeling. De waarde van je variabele wordt nu namelijk gedeeld met alle instanties van Kevin. Als jij 3 BackgroundWorkers start die ieder iets doen, dan zal de waarde iedere keer veranderen.

De juiste manier om dit op te lossen is dat je in de methode DoWork(object sender, DoWorkEventArgs e) van je backgroundworker de waarde van je berekening in de property e.Result stopt. Je kunt dit dan uitlezen door in het RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) event de property Result uit te lezen en te casten naar het juiste type.

We are shaping the future


  • Kips
  • Registratie: Januari 2005
  • Laatst online: 13:29
(jarig!)
Alex) schreef op donderdag 10 oktober 2013 @ 23:26:
Het werkt, maar het is niet de bedoeling. De waarde van je variabele wordt nu namelijk gedeeld met alle instanties van Kevin. Als jij 3 BackgroundWorkers start die ieder iets doen, dan zal de waarde iedere keer veranderen.

De juiste manier om dit op te lossen is dat je in de methode DoWork(object sender, DoWorkEventArgs e) van je backgroundworker de waarde van je berekening in de property e.Result stopt. Je kunt dit dan uitlezen door in het RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) event de property Result uit te lezen en te casten naar het juiste type.
Als Kevin inderdaad een module is is dit volgens mij niet het geval aangezien deze nooit geinstantieerd wordt, maar altijd shared/static gebruikt wordt..
Alex) schreef op maandag 14 oktober 2013 @ 09:06:
Is dat zo? :$

De eerlijk gebiedt mij te zeggen dat ik eigenlijk nooit wat met VB.NET doe waardoor ik dus ook niet helemaal op de hoogte ben van het verschil tussen een Module en een Class. In C# is het wat simpeler, je hebt alleen classes (en structs), en een class met alleen maar statics kun je markeren met static.

Hoe dan ook: zorg ervoor dat Kevin geen Module meer is maar een Class en pas je code erop aan, dan werkt het beter. :)
Jup, zie: http://stackoverflow.com/...sses-vs-modules-in-vb-net

Ben het overigens met je eens dat in dit geval beter een class kunt gebruiken! d:)b

[ Voor 28% gewijzigd door Kips op 14-10-2013 09:13 ]


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Is dat zo? :$

De eerlijk gebiedt mij te zeggen dat ik eigenlijk nooit wat met VB.NET doe waardoor ik dus ook niet helemaal op de hoogte ben van het verschil tussen een Module en een Class. In C# is het wat simpeler, je hebt alleen classes (en structs), en een class met alleen maar statics kun je markeren met static.

Hoe dan ook: zorg ervoor dat Kevin geen Module meer is maar een Class en pas je code erop aan, dan werkt het beter. :)

We are shaping the future


  • Satom
  • Registratie: Mei 2011
  • Laatst online: 26-10 22:27

Satom

Verzamel ervaringen

Topicstarter
Iedereen bedankt voor de reacties, met Public variabel werkte het nog niet goed. Ik kreeg foutmeldingen..

Het is trouwens een While (True)-loop die gestopt word met een Button, doe ik er dan wel goed aan om een BackGroundWorker (in combinatie met While) te gebruiken. Het programma moet continu een loop uitvoeren.
Pagina: 1