как заставить пользовательские элементы управления запускаться в собственном потоке - PullRequest
1 голос
/ 18 июля 2009

как я могу заставить пользовательский элемент управления работать в своем собственном потоке?

например. следуя коду в пользовательском элементе управления, пользовательский элемент управления coz использует основной поток приложения, который переводит основной поток в режим сна

Thread.Sleep(TimeSpan.FromMinutes(2));

Ответы [ 2 ]

3 голосов
/ 18 июля 2009

Пользовательские элементы управления должны выполняться в потоке пользовательского интерфейса, поскольку это ограничение в Windows API. Если вы попытаетесь использовать элементы управления Windows Forms из другого потока, вы получите исключение.

Вы можете запустить другой код в другом потоке, но используйте поток пользовательского интерфейса для обновления элементов управления. Вы можете использовать BackgroundWorker для этого. Или вы можете использовать методы InvokeRequired и Invoke или BeginInvoke для экземпляра элемента управления, чтобы он выполнял код в потоке пользовательского интерфейса.


Вы упоминаете, что хотите использовать блокировку мьютекса. Мьютекс состоит в том, чтобы избежать одновременного доступа нескольких ресурсов к ресурсу. Если весь ваш код выполняется в одном потоке, блокировка вам вообще не нужна.

2 голосов
/ 18 июля 2009

Объекты на самом деле не "запускаются" сами по себе - методы выполняются в потоке.

Теперь, если вы хотите, чтобы конкретный метод выполнялся в другом потоке, вам нужно либо создать новый поток, либо явно использовать пул потоков, либо использовать что-то, что для вас использует пул потоков, например BackgroundWorker.

Что вы делаете, когда хотите спать две минуты? Можете ли вы избежать сна, просто установив таймер на срабатывание (в потоке пользовательского интерфейса) за две минуты? Если это является частью какого-то длительного процесса, вы должны использовать BackgroundWorker или другой способ выполнения в другом потоке, но сам элемент управления по-прежнему обрабатывает обновления и события в потоке пользовательского интерфейса.

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