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
    }

Результат задачи затем возвращается через событие OnOperationComplete . Проблема в том, что когда событие вызывается, оно все еще находится в фоновом потоке. Т.е., если я пытаюсь запустить этот код (ниже), я получаю ошибку перекрестного потока;

txtOutput.AppendText(e.Result + Environment.NewLine);

Пожалуйста, посоветуйте любые мысли.

7
задан 4 September 2010 в 16:26
поделиться