Я пишу очень простой асинхронный вспомогательный класс для моего проекта.Цель этого класса заключается в том, что он позволяет запускать метод в фоновом потоке.Вот код:
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);
Пожалуйста, посоветуйте любые мысли.