Для записи, я только что проверил этот код:
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
SetCellValue(0, 0, "Hello World");
}
public void SetCellValue(int columnIndex, int rowIndex, object value)
{
if (dataGridView1.InvokeRequired)
{
dataGridView1.Invoke(new Action<int, int, object>(SetCellValue), columnIndex, rowIndex, value);
}
else
{
dataGridView1[columnIndex, rowIndex].Value = value;
}
}
, и он работал без проблем. Я не вижу специфической c проблемы с вашим кодом - хотя я не знаю, что я ищу - но я могу гарантировать, что этот код работает.
РЕДАКТИРОВАТЬ: Для решения указанных c проблема, с которой вы столкнулись, и это стало ясно после того, как вы предоставили всю необходимую информацию, вам необходимо объявить своего делегата следующим образом:
public delegate void SetTextCallback(int row, int col, string text);
Вы просто копируете объявление метода, меняете имя и добавляете ключевое слово делегата.