Backgroud Работник сообщить о прогрессе C # - PullRequest
1 голос
/ 01 декабря 2011

Мой код:

BackgroundWorker worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;
worker.WorkerReportsProgress = true;
worker.ProgressChanged += new ProgressChangedEventHandler  (worker_ProgressChanged);
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{

     ResourceConsumingFunction();
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
        Finished(true);
};
worker.RunWorkerAsync();

Я хочу сообщать о прогрессе довольно часто, но не знаю, как это сделать. Я не могу изменить resourceConsumingFunction (); Есть идеи?

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Если вы не можете изменить ResourceConsumingFunction ваше невезение.

Поскольку ResourceConsumingFunction выполняет всю работу, если вы не можете изменить его, чтобы сообщить о прогрессе, как вы ожидаете, что сможете показать прогресс? Остальная часть вашего кода не может волшебным образом угадать, как долго будет работать ResourceConsumingFunction до его завершения.

1 голос
/ 01 декабря 2011

Как правильно указывает Ойвинд Кноблох-Бротен - если вы не можете получить информацию о прогрессе от ResourceConsumingFunction, то вы не можете сообщить о ней.
Вам нужен какой-то способ подключиться к ResourceConsumingFunction для измерения его прогресса.Это создание файлов, запись чего-либо на диск или изменение доступных переменных, которые вы можете измерить / использовать в качестве значения прогресса, не имея доступа к работе функции?
Если вы не можете получить внешний дескриптор хода выполнения этой функциитогда ты обречен.

...