I din SqlCommand
du kan køre kommandoer asynkront ved hjælp af BeginExecuteNonQuery
og EndExecuteNonQuery
. Sidstnævnte vil blokere, indtil det er færdigt. Dette vil dog ikke rapportere fremskridtene fra serveren om, hvordan sikkerhedskopieringen forløber - jeg ville bruge en markeringsfremskridtslinje til det.
For at undgå EndExecuteNonQuery
fra at blokere din brugergrænseflade (afhængigt af hvordan du håndterer den), skal du bruge en baggrundstråd. Hvis du bruger dette, kan du lige så godt lade være med at bruge BeginXXX
EndXXX
metoder og gør det synkront på en baggrundstråd - BackgroundWorker
er bedst til dette.
For at undgå at bruge en baggrundstråd i brugergrænsefladen i stedet for at blokere på EndXXX
du skal registrere et tilbagekald og håndtere den resulterende hændelse (kalder EndXXX
). i denne hændelseshandler, men den vender tilbage med det samme).
Opdatering: som i en kommentar, for asynkrone opkald til SQL-kommando/forbindelsesting, skal du angive så meget i forbindelsesstrengen:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Eller i kode ved hjælp af forbindelsesstrengbyggeren:
builder.AsynchronousProcessing = true;