Где создать экземпляр формы? - PullRequest
2 голосов
/ 16 июля 2011

Мне могут понадобиться пара советов, так как я чувствую, что то, как я это делаю, не является «правильным» способом, и установка по умолчанию при создании нового приложения с графическим интерфейсом в Visual Studio для меня не подходит.

Что я делаю, так это то, что в моем приложении есть основной класс, который выполняет всю работу.Он запускает несколько потоков, которые собирают данные и управляют ими, и я хочу, чтобы он "сообщал" форме GUI, что он делает.

Чтобы ударить это (выше) из моего main.cs (точка входаapp) разделяет рабочий класс (основной класс) и форму в двух отдельных потоках.В таком случае связь осуществляется делегатами, и тогда она не «течет», как я и надеялся.

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

1 Ответ

2 голосов
/ 16 июля 2011

Вот один из способов сделать это. Это может быть не оптимальным для того, что вы делаете, зависит от данных, которые вы передаете:

Вы можете использовать форму в качестве объекта запуска и использовать элементы управления BackgroundWorker.

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

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

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

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