проблема перекрестной нити - PullRequest
1 голос
/ 26 июня 2011

У меня есть одна кнопка со следующим кодом

    new Thread(() =>
    {
        DataTable table = Finish(txtTest.Text);
        //dgwTest.DataSource = table

    }).Start();

и я хотел бы установить источник данных datagridview, но я получаю исключение "кросс-поток". Кто-нибудь знает, как мне этого избежать?

Ответы [ 2 ]

5 голосов
/ 26 июня 2011

string source = txtTest.Text;

new Thread(() =>
{
      DataTable table = Finish(source);
      dgwTest.Invoke ((Action) (() => dgwTest.DataSource = table));
}).Start(); 
0 голосов
/ 26 июня 2011

Вам необходимо использовать метод Invoke на DataGridView

private delegate void SetDGVValueDelegate(DataTable table);

private void button1_Click(object sender, EventArgs e)
{
    new Thread(() =>    {        
        DataTable table = Finish(txtTest.Text);

        SetDGVValue(table);

    }).Start();

}

private void SetDGVValue(DataTable table) 
{ 
    if (dataGridView1.InvokeRequired) 
    { 
        dataGridView1.Invoke(new SetDGVValueDelegate(SetDGVValue), table); 
    } 
    else 
    { 
        dataGridView1.DataSource = table; 
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...