在更新工作线程上的数据表之前解除绑定dataGridView

时间:2013-04-19 11:57:32

标签: c# multithreading datagridview datatable

我遇到的问题与提出的问题here非常相似。我从串口输入数据。串行接收事件更新数据表(同一类中的公共属性)。当在端口上接收数据时,我取消绑定dataGridView;通过添加行来更新数据表;然后使用delagate更新dataGridView。调试时(或在VS2010中创建一个版本),一切正常。但是,如果我从创建目录(调试或发布)运行程序或安装,当dataGridView到达需要滚动的行数时,程序会锁定并超时?从VS2010内部运行时不会发生 - 但是在开发环境“之外”吗?

我正在尝试使用从dataRowChanged

引发的事件来更新dataGridView

以下是代码:

    void dtData_RowChanged(object sender, DataRowChangeEventArgs e)
    {
        SetGridView(dataGridView1);
    }

代表:

delegate void SetGridViewCallBack(DataGridView dgv);
private void SetGridView(DataGridView dgv)
{
    // InvokeRequired required compares the thread ID of the
    // calling thread to the thread ID of the creating thread.
    // If these threads are different, it returns true.
    if (this.dataGridView1.InvokeRequired)
    {
        SetGridViewCallBack d = new SetGridViewCallBack(SetGridView);
        this.Invoke(d, new object[] { dgv });
    }
    else
    {
        this.dataGridView1.DataSource = dtData;
        this.dataGridView1.ScrollBars = ScrollBars.None;
        this.dataGridView1.Refresh();
        this.dataGridView1.ScrollBars = ScrollBars.Vertical;
        this.dataGridView1.Refresh();

        // if scolled, focus on the last row
        if (dataGridView1.Rows.Count > 3)
        {
            this.dataGridView1.CurrentCell = dataGridView1[0, dataGridView1.Rows.Count - 1];
        }
    }

好的 - 所以a)为什么会在IDE“外面”崩溃?和b)我做错了什么???

提前感谢您提供任何帮助

0 个答案:

没有答案