Я ищу универсальный метод для реализации экрана ожидания при длительных операциях. Я уже несколько раз использовал многопоточность, но у меня такое ощущение, что я реализовал это либо очень плохо, либо из-за слишком больших хлопот (а копирование / вставка - ужас!).
Я хочу сделать это как можно более простым и простым, чтобы мне не пришлось реализовывать нагрузку BackgroundWorker
s, обрабатывающую все виды дерьма, что усложняет обслуживание.
Вот что я хотел бы сделать - обратите внимание, что это может отличаться от того, что на самом деле возможно / передовой опыт / что угодно - с использованием VB.NET, Framework 2.0 (поэтому нет анонимных методов):
Private Sub HandleBtnClick(sender as Object, e as EventArgs) Handles Button.Click
LoadingScreen.Show()
'Do stuff here, this takes a while!'
Dim Result as Object = DoSomethingTakingALongTime(SomeControl.SelectedObject)
LoadingScreen.Hide()
ProcessResults(Result)
End Sub
Приложение теперь полностью однопоточное, поэтому все работает в потоке GUI. Мне нужно иметь возможность доступа к объектам в DoSomethingTakingALongTime()
без получения исключений между потоками. Поток GUI ожидает завершения какого-либо метода (который занимает много времени), в то время как форма LoadingScreen
должна оставаться отзывчивой (она анимирована / имеет индикатор выполнения / и т.д.).
Это выполнимый / хороший подход или я вижу этот путь слишком упрощенным? Какова лучшая практика в этом вопросе? И самое главное: как я мог реализовать такую систему? Как я уже упоминал, у меня очень мало опыта работы с потоками, поэтому будьте осторожны: -)