In mijn applicatie maak ik gebruik van een Backgroundworker om een thread te laten runnen die een connection probeert te openen naar een database. Dit had ik eerder zonder Threads, wat er dus voor zorgde dat het leek of de applicatie hing.
Wat ik nu doe is dat ik de backgroundworker een connectie laat openen en in de RunWorkerCompleted zie ik dan wel of de connectie gelukt was of niet en aan de hand daarvan komt een meldig. Dat werkt allemaal.
Wat ik nu wil is dat de knop waarmee een databaseconnectie getest wordt, ook kan gebruiken om het proberen te connecten naar de database te stoppen, maar dit krijg ik dus gewoon niet voor elkaar.
Ik heb een aantal mogelijkheden om de backgroundworker te stoppen zoals:
Dit werkt echter niet, omdat hiermee de volgende property op True wordt gezet
De Thread hangt op dat moment als het ware op het openen van de connectie
Hoe krijg ik het vanuit de UI thread voor elkaar om de thread te laten stoppen? De gebruiker ziet bijvoorbeeld meteen nadat er op de 'Test Connectie' knop is gedrukt dat de ingevoerde servernaam niet klopt. Om hem i.p.v. 2 minuten te laten wachten, moet hij het meteen kunnen cancellen en de aanpassing kunnen maken.
Wat ik nu doe is dat ik de backgroundworker een connectie laat openen en in de RunWorkerCompleted zie ik dan wel of de connectie gelukt was of niet en aan de hand daarvan komt een meldig. Dat werkt allemaal.
Wat ik nu wil is dat de knop waarmee een databaseconnectie getest wordt, ook kan gebruiken om het proberen te connecten naar de database te stoppen, maar dit krijg ik dus gewoon niet voor elkaar.
Ik heb een aantal mogelijkheden om de backgroundworker te stoppen zoals:
Visual Basic .NET:
1
| WorkerTestConnection.CancelAsync() |
Dit werkt echter niet, omdat hiermee de volgende property op True wordt gezet
Visual Basic .NET:
1
| WorkerTestConnection.CancellationPending |
De Thread hangt op dat moment als het ware op het openen van de connectie
Visual Basic .NET:
1
2
| Dim Con as System.Data.SqlClient.SqlConnection Con.Open |
Hoe krijg ik het vanuit de UI thread voor elkaar om de thread te laten stoppen? De gebruiker ziet bijvoorbeeld meteen nadat er op de 'Test Connectie' knop is gedrukt dat de ingevoerde servernaam niet klopt. Om hem i.p.v. 2 minuten te laten wachten, moet hij het meteen kunnen cancellen en de aanpassing kunnen maken.