1

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

我正在尝试使用从dataRowChanged.

这是代码:

    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)我做错了什么???

提前感谢您的帮助

4

0 回答 0