के लिए टाइमआउट मैं System.ComponentModel.BackgroundWorker
का उपयोग कर रहा हूं WPF एप्लिकेशन में।पृष्ठभूमिवर्कर
BackgroundWorker
के लिए मैं टाइमआउट कैसे सेट कर सकता हूं?
के लिए टाइमआउट मैं System.ComponentModel.BackgroundWorker
का उपयोग कर रहा हूं WPF एप्लिकेशन में।पृष्ठभूमिवर्कर
BackgroundWorker
के लिए मैं टाइमआउट कैसे सेट कर सकता हूं?
मेरे सुझाव
backgroundworker1 पीछा कर रहा है काम करता है - यह रद्द करने को स्वीकार करता है, तो आप इसे रोकने के कर सकते हैं।
backgroundworker2 समय समाप्त होने के दौरान एक लूप करता है, और समय समाप्त हो जाता है।
तो backgroundworker1 अभी भी चल रहा है, इस BackgroundWorker
की RunWorkerComplete
, बंद को मारता है backgroundworker1 ..
यह भी रद्द ताकि अगर backgroundworker1 पूरा करता है और यह अभी भी चल रहा है स्वीकार करना चाहिए , आप इसे रद्द कर सकते हैं।
एक और धागा डी वास्तव में, कोई आसान नहीं है, एक और तरीका है? –
शायद, लेकिन काफी सटीक समय प्राप्त करने के साथ-साथ कार्यक्षमता के लिए, कई विकल्प नहीं हैं। आप वंश के कुछ रूप कर सकते हैं और लगातार अपने मूल कार्यकर्ता में पारित समय की जांच कर सकते हैं, लेकिन, यदि आपके पास ब्लॉकिंग कॉल का कोई भी रूप था तो यह टाइमआउट से अधिक हो सकता है। – BugFinder
पृष्ठभूमिवर्कर सीधे टाइमआउट का समर्थन नहीं करता है, लेकिन यह रद्दीकरण का समर्थन करता है। यह काम अच्छी तरह से काम करेगा यदि काम किया जा रहा है एक लूप या अन्य संरचना है जहां आप समय-समय पर निरस्त करने के लिए रद्द करने के लिए रद्द कर सकते हैं। पृष्ठभूमि कार्यकर्ता को टाइमआउट के बाद रद्द करने के लिए आपको कुछ और चाहिए। यहां मैंने एक एक्शन के एसिंक कॉल का इस्तेमाल किया था।
static void Main(string[] args)
{
var bg = new BackgroundWorker { WorkerSupportsCancellation = true };
bg.DoWork += LongRunningTask;
const int Timeout = 500;
Action a =() =>
{
Thread.Sleep(Timeout);
bg.CancelAsync();
};
a.BeginInvoke(delegate { }, null);
bg.RunWorkerAsync();
Console.ReadKey();
}
private static void LongRunningTask(object sender, DoWorkEventArgs eventArgs)
{
var worker = (BackgroundWorker)sender;
foreach (var i in Enumerable.Range(0, 5000))
{
if (worker.CancellationPending)
{
return;
}
else
{
//Keep working
}
}
}
यदि यह वास्तव में फिट नहीं करता है अपने क्या हासिल करना आप सामान्य समय समाप्ति समाधान Implementing a timeout on a function returning a value या Implement C# Generic Timeout में पाया में रुचि हो सकती कोशिश कर रहे हैं। आप BackgroundWorker के अंदर उन लोगों का उपयोग कर सकते हैं।
धन्यवाद लेकिन यह काम नहीं करता है, eventArgs.Cancel कभी सच नहीं आता है। –
@ अरमेनखचट्रीन ओह, निश्चित रूप से यह नहीं है, मैं रद्द जानकारी (^ _ ^;) के लिए गलत वस्तु की जांच कर रहा था। मैंने एक फिक्स के साथ संपादित किया है। – vossad01
एक आकर्षण की तरह काम करता है। बहुत धन्यवाद .... यदि आप ओओ मोड जा रहे हैं ;-), आप ग्लोबल var bg = new BackgroundWorker कर सकते हैं और CancelAsync() का उपयोग कर सकते हैं; आपके कोड में कहीं भी। –
क्या करने के लिए टाइमआउट? – Dimitri
कुछ, यह कुछ करता है, और मैं टाइमआउट के बाद इसे रोकना चाहता हूं। –
हाँ जैसे बगफिंडर ने निष्पादन रद्द करने के लिए रद्दीकरण टोकन का उपयोग – Dimitri