आपके SqlCommand
. में आप BeginExecuteNonQuery
. का उपयोग करके अतुल्यकालिक रूप से कमांड चला सकते हैं और EndExecuteNonQuery
. बाद वाला अपना काम पूरा होने तक ब्लॉक कर देगा। हालांकि यह सर्वर की प्रगति की रिपोर्ट नहीं करेगा कि बैकअप कैसे चल रहा है - मैं इसके लिए एक मार्की प्रोग्रेस बार का उपयोग करूंगा।
EndExecuteNonQuery
से बचने के लिए अपने UI को ब्लॉक करने से (आप इसे कैसे हैंडल करते हैं इसके आधार पर), आपको एक बैकग्राउंड थ्रेड की आवश्यकता होगी। यदि आप इसका उपयोग करते हैं तो आप BeginXXX
. का भी उपयोग नहीं कर सकते हैं EndXXX
विधियों और इसे पृष्ठभूमि थ्रेड पर सिंक्रोनाइज़ करें - BackgroundWorker
इसके लिए सबसे अच्छा है।
UI में बैकग्राउंड थ्रेड का उपयोग करने से बचने के लिए, EndXXX
. पर ब्लॉक करने के बजाय आपको कॉलबैक पंजीकृत करना होगा और परिणामी घटना को संभालना होगा (EndXXX
. पर कॉल करना) इस घटना में हैंडलर, लेकिन यह तुरंत वापस आ जाएगा)।
अपडेट करें: एक टिप्पणी के अनुसार, SQL कमांड/कनेक्शन सामग्री में एसिंक्रोनस कॉल के लिए, आपको कनेक्शन स्ट्रिंग में उतना ही निर्दिष्ट करना होगा:
http://www.connectionstrings.com/sql-server-2008
Server=myServerAddress; Database=myDataBase; Integrated Security=True; Asynchronous Processing=True;
या कनेक्शन स्ट्रिंग बिल्डर का उपयोग करके कोड में:
builder.AsynchronousProcessing = true;