Если вы создаете форму в потоке, форма исчезнет, когда поток будет завершен.Если вы хотите, чтобы форма просуществовала дольше, вам нужно либо сохранить поток в рабочем состоянии, либо создать форму в главном потоке приложения.Последнее было бы предпочтительнее.Просто убедитесь, что каждый подключил прослушиватель событий для объекта в соответствующей форме, и используйте Invoke
или BeginInvoke
при необходимости при обновлении формы.
Простой пример:
Первый работник: класс Worker {public event EventHandler SomethingHappened;
protected void OnSomethingHappened(EventArgs e)
{
var evnt = SomethingHappened;
if (evnt != null)
{
evnt(this, e);
}
}
public void Work()
{
// do lots of work, occasionally calling
// OnSomethingHappened
}
}
Затем в форме у нас есть обработчик события для события SomethingHappened:
public void SomethingHappenedHandler(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => SomethingHappenedHandler(sender, e)));
return;
}
// update gui here
}
Тогда на самом деле нужно просто соединить все вместе:
Worker w = new Worker();
ProgressForm f = new ProgressForm;
w.SomethingHappened += f.SomethingHappenedHandler;
f.Show();
Thread t = new Thread(w.Work);
t.Start();
Отказ от ответственности: этот образец быстро подбрасывается и несколько не проверяется (сидя в поезде, вот-вот сойдет;)).