Q1.Почему businessLogic.DoWork работает как поток, а не как обычный вызов метода?
А1.DoWork должен быть в отдельном потоке, чем основной поток GUI, так как основной поток GUI должен быть свободен для прокачки очереди сообщений (что позволяет ему перерисовывать себя, обрабатывать различные события GUI и т. Д.) Попробуйте создать простую программу GUIу которого есть некоторое время (true) в главном потоке, и вы видите, что графический интерфейс застревает и не перерисовывается.
Q2. Может кто-нибудь объяснить мне функцию RefreshPresentation?(BeginInvoke и делегат)
A2.Хотя DoWork необходимо выполнять в другом потоке, чтобы он не блокировал поток GUI, обновление GUI всегда должно выполняться из потока GUI.Чтобы это произошло, вы можете вызвать BeginInvoke, который отправляет сообщение в очередь сообщений и вызывает выполнение вашего делегата в потоке GUI.
Q3. Хорошая идея / практика - передатьMainForm как параметр для BusinessLogic?
A3.Нет. MainForm может знать о бизнес-логике, но бизнес-логика не должна знать о GUI.Google "MVC" для получения дополнительной информации об отделении GUI от бизнес-логики.