Вы можете вызвать событие после вызова Close
- вызов Form.Close
не завершит вызов метода, который его вызвал.
EDIT : попробуйте использовать BeginInvoke
для ожидания следующего цикла сообщений перед обработкой события, например:
form2.dataChanged += delegate { BeginInvoke(new DataChangeListener(myListener)); };
2 nd EDIT : чтобы дать Form1 возможность перекрасить, дважды вызовите BeginInvoke для ожидания двух циклов сообщений перед обновлением (один для закрытия Form2, а второй для перекраски Form1) , вот так:
form2.dataChanged += delegate(parameters) {
BeginInvoke(new Action(delegate {
BeginInvoke(new DataChangeListener(myListener), parameters);
}));
//Or,
BeginInvoke(new Func<Delegate, object[], IAsyncResult>(BeginInvoke),
new object[] { parameters }
);
};