Запуск длинного процесса в потоке пользовательского интерфейса и обновление пользовательского интерфейса для отчета о ходе выполнения - PullRequest
1 голос
/ 21 января 2011

У меня есть приложение на C #, которое должно обрабатывать долгую работу.У меня есть некоторые ограничения, из-за которых я не могу позволить себе выполнять эту длинную работу в фоновом потоке, например, некоторые из используемых мной com-объектов нельзя использовать в фоновом потоке.Как я могу обработать эту длинную работу в потоке пользовательского интерфейса и обновить его с помощью отчета о ходе выполнения.

Можно ли что-нибудь сделать для того, чтобы пользовательский интерфейс реагировал на обработку большой работы?заранее,

Бибек Давади

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Вы можете использовать COM-объекты из фоновых потоков. Просто убедитесь, что фоновый поток также является потоком STA. (предположение: COM-объект сам является объектом STA).

В Vista Aero и более поздних версиях Windows будет принимать странные решения, если вы не покрасите свои окна достаточно быстро. Таким образом, он начнет отображать старые версии содержимого окна. Это начнется, если ваше окно не отвечает на сообщения рисования в течение секунды или двух.

0 голосов
/ 21 января 2011

Если это задание не является одним большим блокирующим вызовом, и вы используете WinForms, вы можете вызвать Application.DoEvents() из своей длительной операции. Каждый раз, когда вы вызываете его, пользовательский интерфейс обновляется (все ожидающие сообщения окна будут обрабатываться), поэтому вызывайте его так часто, как вы хотите, чтобы ваш пользовательский интерфейс отвечал.

...