Я только что написал это для аналогичного вопроса.
Я использую нити для такого рода вещей.
где-то в моем коде:
// Definition
private static Thread TH;
....
// When process starts
TH = new Thread(new ThreadStart(Splash_MyCallBack));
TH.Start();
....
// This method starts the form that shows progress and other data
static private void Splash_MyCallBack()
{
frmLoading FL;
FL = new frmLoading();
FL.ShowDialog();
} /* Splash_MyCallBack*/
// Your process calls Splash_Stop when it is done.
static public void Splash_Stop()
{
TH.Abort();
} /* Splash_Stop*/
frmLoading выполняет визуальные функции, в то время как в фоновом режиме у меня очень трудоемкая задача.Мой процесс сообщает интерфейсу о своем прогрессе.frmLoading реализует этот интерфейс, так что он знает о нем и может показывать, когда он необходим (в моем случае 2 индикатора выполнения). Единственное, что нужно, это значит, что frmLoading должен иметь это в конструкторе:рискованно в некоторых сценариях (не в моем случае).
Я думаю, что тот факт, что основной процесс вызывает интерфейс для обновления прогресса, а реальный интерфейс потребляет это шаблон.Надеюсь, это поможет, я могу добавить больше материала, если хотите.
С уважением,