Tôi đang viết một lớp trợ giúp không đồng bộ rất đơn giản để đi cùng với dự án của tôi. Mục đích của lớp là nó cho phép một phương thức được chạy trên một luồng nền. Đây là mã;C# gọi lại async vẫn còn trên nền chủ đề ... giúp đỡ! (tốt nhất là không có 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
}
Kết quả của tác vụ sau đó được trả về thông qua sự kiện OnOperationComplete
. Vấn đề là khi sự kiện được nâng lên, nó vẫn còn trên chủ đề nền. I E. nếu tôi cố gắng để chạy mã này (dưới đây) tôi nhận được một lỗi luồng chéo;
txtOutput.AppendText(e.Result + Environment.NewLine);
Vui lòng thông báo cho mọi suy nghĩ.
Bạn có đang sử dụng .NET 2.0, 3.5, 4.0 không? Và bạn đang tạo một ứng dụng WinForms, WPF, Silverlight? –
.NET 4.0, thư viện lớp học –