C# Заполнить dataGridView1 CELL из другого потока - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь вызвать dataGridView1 из другого потока, но возникают ошибки. Как это исправить?

Спасибо

public void SenddataGridView1(int row, int col, string text)
{
    if (this.dataGridView1.InvokeRequired)
    {
        SetTextCallback h = new SetTextCallback(SenddataGridView1);
        this.Invoke(h, new object[] { row, col, text });
    }
    else
    {
        dataGridView1.Rows[row].Cells[col].Value = text;
    }
}

1 Ответ

1 голос
/ 30 марта 2020

Для записи, я только что проверил этот код:

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);

Вы просто копируете объявление метода, меняете имя и добавляете ключевое слово делегата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...