andycruce Ответов: 1

Использование нескольких форм и backgroundworker


У меня есть программа, которая использует BackgroundWorker (BW) для периодического запроса оборудования GPS для получения информации о местоположении. Он использует единую форму для всей операции. Я расширяю проект, чтобы включить в него два BW, один с высокой скоростью для запроса IMU и другой с более медленной скоростью для запроса GPS.

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

Я протестировал программу для переключения между формами, выпустив form. hide () на базовой форме, а затем выполнив form.show () на второй форме. Это работает, за исключением того, что когда я делаю form. show() , он не выполняет код в основном методе
общественные формы Form2()
{
Инициализировать Компонент();
*** этот код не выполняется
}

Это первая проблема, и, возможно, мне придется восстановить форму.

Более серьезная проблема заключается в том, что Form1 (базовая форма при запуске) и Form 2, я верю, в разные потоки. Form2 по-прежнему должен использовать BW для периодических запросов к GPS и INS после их запуска, пока не будет получено исправление. Я храню данные GPS и INS в общедоступном статическом классе, поэтому они доступны для всех других программ / классов и т. Д. Я не думаю, что могу использовать функции BW из Form1, потому что я использую событие WorkCompleted для записи данных в Form1 . Могу ли я запустить отдельный набор BW в Form2, чтобы обеспечить эту функцию, и не будет ли это мешать BW в From1? Я бы запустил BW в Form2, использовал их до тех пор, пока все не было должным образом инициализировано, и остановил Form2 BW и перешел в Form1, статовал там задачи BW и выполнял сбор, отображение и хранение данных в Form1. Все это кажется очень сложным, и, возможно, было бы лучше просто упаковать всю инициализацию и вывод на экран в Form1, забыть о Form2 и используемых методах в Form1 для задач инициализации, отображения и хранения.

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

Что я уже пробовал:

Я экспериментировал с несколькими BW, и они, похоже, работают правильно. Я также имел ограниченный успех в тестировании нескольких форм в небольшой программе на C#.

NotPolitcallyCorrect

"form. show () он не выполняет код", и он этого не сделает. Show не создает экземпляр формы.
"Форма 2 - я верю в разные нити", вы "верите"? Почему ты не знаешь?
"кажется очень сложным", да, это так. Мне кажется, что вы все слишком усложняете.
"Любые другие предложения", ну, мое предложение, поскольку вы не знаете разницы между основным методом и конструктором, вы должны взять себе базовую книгу по программированию и проработать ее, прежде чем приступать к более продвинутым темам, таким как многопоточность.

1 Ответов

Рейтинг:
0

OriginalGriff

Он не исполняется, когда вы это делаете form.Show() потому что это часть кода конструктора: он выполняется, когда форма создается

Form2 form = new Form2();
И ни в какое другое время.
Переместите код из конструктора в Shown событие, и оно будет выполнено в первый (и только в первый) раз, когда форма действительно будет отображена.