Получить значение Получить от делегата, выполняемого в Backgroundworker? - PullRequest
2 голосов
/ 20 июля 2010

У меня есть приложение Windows Forms, которое загружает dll @ runtime и выполняет метод с использованием Delegate.Проделанная работа заключается в загрузке файлов в WebApp и занимает много времени.Я хотел бы использовать BackgroundWorker, чтобы запустить его в фоновом режиме, а затем открыть форму, сообщающую пользователю, что загрузка завершена и сколько файлов было успешно загружено.Но я не уверен, как получить int, возвращаемый методом, вызываемым через делегата, из BackgroundWorker.

Итак, вот код, который выполняет работу

private int UploadDocs(object sender, DoWorkEventArgs e)
        {
            Assembly a = Assembly.LoadFrom(this.txtReleaseScript.Text);
            Type type = a.GetType("FileReleaseHandler", true);
            string[] param = new string[8];
            //populate the array with parameters
            IFileReleaseHandler handler(IFileReleaseHandler)Activator.CreateInstance(type, param);
            ReleaseFileDelegate RFD = new ReleaseFileDelegate(handler.ReleaseFiles);
            int numberOfFilesUploaded = RFD.Invoke(Source, Dest);
            return numberOfFilesUploaded;
        }

Вот как я называю это в BackgroundWorker

private void btRelease_Click(object sender, EventArgs e)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += new DoWorkEventHandler(UploadDocs);
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.ShowUploadResults);
            bw.RunWorkerAsync();
        }

ShowUploadResults просто открывает форму, чтобы сообщить пользователю, что процесс загрузки завершен.У меня вопрос, как я могу получить int, который возвращается из метода UploadDocs, и передать его в метод ShowUploadResults, чтобы он мог отображать что-то вроде «55 файлов были успешно загружены»?

1 Ответ

4 голосов
/ 20 июля 2010

Назначьте значение результата для e.Result.Затем он будет доступен в вашем ShowUploadResults как e.Result.Цитата из MSDN docs :

"Если ваша операция дает результат, вы можете присвоить результат свойству DoWorkEventArgs.Result. Это будет доступно обработчику события RunWorkerCompletedсвойство RunWorkerCompletedEventArgs.Result. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...