Проблема, с которой вы столкнетесь при таких вещах, заключается в том, что для запуска делегата вам понадобится очень специфический метод обновления. Например, обновление текста в текстовом поле.
Создайте делегата с такой же подписью, как у метода, который был ранее определен:
public delegate void UpdateTextCallback(string text);
В вашем потоке вы можете вызывать метод Invoke в TextBox, передавая делегат для вызова, а также параметры.
myTextBox.Invoke(new UpdateTextCallback(this.UpdateText),
new object[]{"Text generated on non-UI thread."});
И это фактический метод, который будет запускать ваш код.
// Updates the textbox text.
private void UpdateText(string text)
{
// Set the textbox text.
myTextBox.Text = text;
}
Примечание. Не создавайте метод, соответствующий сигнатуре делегата EventHandler, и не передавайте его. Реализация Invoke в классе Control не будет учитывать параметры, переданные Invoke, если тип делегата - EventHandler. Он передаст элемент управления, который был вызван Invoke для параметра отправителя, а также значение, возвращаемое EventArgs.Empty для параметра e.
Так что в вашем случае вам необходимо убедиться, что вы передаете всю необходимую информацию для обновления вашей сетки.