Ve vašem SqlCommand příkazy můžete spouštět asynchronně pomocí BeginExecuteNonQuery a EndExecuteNonQuery . Ten se zablokuje, dokud nebude hotový. To však nebude hlásit postup ze serveru o tom, jak zálohování probíhá - použil bych pro to pruh průběhu.
Chcete-li se vyhnout EndExecuteNonQuery z blokování vašeho uživatelského rozhraní (v závislosti na tom, jak s ním zacházíte), budete potřebovat vlákno na pozadí. Pokud toto použijete, můžete také nepoužívat BeginXXX EndXXX a provádějte to synchronně ve vláknu na pozadí - BackgroundWorker je pro to nejlepší.
Chcete-li se vyhnout použití vlákna na pozadí v uživatelském rozhraní, místo blokování na EndXXX budete muset zaregistrovat zpětné volání a zpracovat výslednou událost (volání EndXXX v této obsluze události, ale okamžitě se vrátí).
Aktualizace: podle komentáře, pro asynchronní volání do SQL příkazu/připojovacích věcí musíte v připojovacím řetězci uvést tolik:
https://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
Nebo v kódu pomocí nástroje pro tvorbu připojovacích řetězců:
builder.AsynchronousProcessing = true;