Держите интерфейс обновленным с помощью потоков - PullRequest
2 голосов
/ 24 августа 2010

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

Однако, когда я использую следующее:

Thread t = new Thread(() =>
{
   /* do magic here */
});

Ничего внутри цикла foreach, находящегося внутри потока, не выполняется. Но когда я не использую поток, работа действительно выполняется, поэтому я знаю, что это не проблема с циклом.

Есть предложения?

Ответы [ 4 ]

1 голос
/ 24 августа 2010

Возможно, вы также захотите взглянуть на BackgroundWorker, так как он прекрасно инкапсулирует все.

0 голосов
/ 24 августа 2010

Вам нужно запустить протектор, t.Start();

Создание экземпляра просто создает управляемую оболочку для потока. Вызов Start приведёт в движение вещи и в конечном итоге заставит ваш код работать в отдельном потоке.

0 голосов
/ 24 августа 2010

Возможно, вы еще не запустили поток, поэтому он еще не запущен.

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

0 голосов
/ 24 августа 2010

Вы даже начинаете тему?

newThread.Start();

В предоставленном вами образце вы просто заявляете об этом.

Также имейте в виду, что если вы используете WinForms, вы не сможете обновить пользовательский интерфейс напрямую из любого потока, кроме того, который его создал; например, изменение индикатора выполнения или элемента управления надписью из цикла foreach.

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