Я создаю новый поток, в котором добавляю контролы на панель, созданную в главном потоке. В результате чего вылетает ошибка на то, что панель, на которую я добавляю, была создана не в этом потоке.
Asked
Active
Viewed 1,591 times
1
-
Если вы боитесь модифицировать UI из другого потока, то используйте Invoke. Пример описан в аналогичном вопросе на SO: http://stackoverflow.com/questions/661561/ – cy6erGn0m Feb 16 '11 at 15:17
-
1Ну так да, нет ничего удивительного, что Вам не дали влезть в данные другого потока. Если бы дали, Вы бы получили много интересных ошибок :). – kirelagin Feb 16 '11 at 17:21
-
@Mamont Нужно вынести все действия с UI в один поток и из других потоков уведомлять UI-поток о необходимости изменений. Можно создать отдельный поток с очередью сообщений (на основе Queue из System.Collections). Но самое лучшее - это работу с UI вести в UI-потоке, а длительные задачи, которые требуют много времени на обработку, выносить в BackgroundWorker из System.ComponentModel. – Nicolas Chabanovsky Feb 17 '11 at 10:23
-
@Mamont По этой ссылке http://code.msdn.microsoft.com/cs2008samples лежат примеры по C# для Visual Studio 2008. Там есть приличный пример по работе с потоками. – Nicolas Chabanovsky Feb 17 '11 at 12:23