我遇到的问题与提出的问题here非常相似。我从串口输入数据。串行接收事件更新数据表(同一类中的公共属性)。当在端口上接收数据时,我取消绑定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)我做错了什么???
提前感谢您提供任何帮助