मैं अपनी परियोजना के साथ जाने के लिए एक बहुत ही सरल असीमित सहायक वर्ग लिख रहा हूं। कक्षा का उद्देश्य यह है कि यह पृष्ठभूमि धागे पर एक विधि को चलाने की अनुमति देता है। कोड यहाँ है;सी # async कॉलबैक अभी भी पृष्ठभूमि धागे पर ... मदद! (अधिमानतः बिना InvokeRequired)
internal class AsyncHelper
{
private readonly Stopwatch timer = new Stopwatch();
internal event DownloadCompleteHandler OnOperationComplete;
internal void Start(Func func, T arg)
{
timer.Start();
func.BeginInvoke(Done, func);
}
private void Done(IAsyncResult cookie)
{
timer.Stop();
var target = (Func) cookie.AsyncState;
InvokeCompleteEventArgs(target.EndInvoke(cookie));
}
private void InvokeCompleteEventArgs(T result)
{
var args = new EventArgs(result, null, AsyncMethod.GetEventByClass, timer.Elapsed);
if (OnOperationComplete != null) OnOperationComplete(null, args);
}
#region Nested type: DownloadCompleteHandler
internal delegate void DownloadCompleteHandler(object sender, EventArgs e);
#endregion
}
कार्य का परिणाम तो OnOperationComplete
घटना के माध्यम से दिया जाता है। समस्या यह है कि जब घटना उठाई जाती है, तो यह अभी भी पृष्ठभूमि धागे पर है। अर्थात। अगर मैं इस कोड को चलाने की कोशिश करता हूं (नीचे) मुझे क्रॉस थ्रेडिंग त्रुटि मिलती है;
txtOutput.AppendText(e.Result + Environment.NewLine);
कृपया किसी भी विचार की सलाह दें।
क्या आप .NET 2.0, 3.5, 4.0 पर हैं? और क्या आप WinForms, WPF, सिल्वरलाइट एप्लिकेशन बना रहे हैं? –
.NET 4.0, कक्षा पुस्तकालय –