Как работает вызов обновляющего потока пользовательского интерфейса из рабочего потока? - PullRequest
2 голосов
/ 20 октября 2008

Если у меня есть функция в потоке, которая обрабатывает некоторые данные, она вызывает функцию обратного вызова для обновления статуса в пользовательском интерфейсе.

Если пользовательскому интерфейсу требуется время для обработки функции обратного вызова, то это не очень полезно. Вместо того, чтобы просто обрабатывать обновление в функции обратного вызова, должно ли оно отправлять какое-либо сообщение в интерфейс пользователя таким образом, чтобы оно не блокировалось?

Я имею в виду, что когда в функции обработки я вызываю функцию статуса обновления, она должна немедленно вернуться к функции обработки, а затем в обновлении она может ждать все, что она хочет, чтобы обновление пользовательского интерфейса завершилось.

Или мне нужен 3-й поток для обработки отправки данных обновления в пользовательский интерфейс?

Ответы [ 3 ]

2 голосов
/ 20 октября 2008

Обычно есть способ отправки обратного вызова в поток пользовательского интерфейса без блокировки.

Например:

Я уверен, что если вы посмотрите документы по используемому вами набору UI, вы найдете нечто подобное.

2 голосов
/ 20 октября 2008

В .NET (WinForms, WPF, Silverlight) вам просто нужно использовать объект Dispatcher в потоке пользовательского интерфейса для вызова метода обновления для пользовательского интерфейса. Диспетчеры могут вызываться либо синхронно (с использованием Invoke), либо async (с использованием BeginInvoke / EndInvoke). Обратите внимание, что в .NET существует требование вызывать EndInvoke для каждого BeginInvoke (потому что .NET не дает вам гарантии, что асинхронные дескрипторы будут освобождены), поэтому Fire and Forget не является вариантом по умолчанию (если вы реализовать свой собственный FireAndForget )

0 голосов
/ 20 октября 2008

Mapad разместил ссылку на пользовательский интерфейс и темы здесь , которые могут оказаться полезными. Вы не упомянули, какой инструментарий пользовательского интерфейса и какой язык, поэтому я не могу дать вам никаких подробностей.

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