Я пишу очень простой асинхронный вспомогательный класс, чтобы согласиться с моим проектом. Целью класса является то, что он позволяет использовать метод в фоновом потоке. Вот код;C# async callback все еще на фоне потока ... help! (желательно без 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, Silverlight? –
.NET 4.0, библиотека классов – 2010-09-04 17:59:39