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