行上的C#超出范围异常。清除()
在我的应用程序中,我有一个代码,可以按如下间隔刷新GridView:行上的C#超出范围异常。清除(),c#,C#,在我的应用程序中,我有一个代码,可以按如下间隔刷新GridView: 。。。 公共void InitTimer() { timer1=新系统.Timers.Timer(); timer1.appead+=新的ElapsedEventHandler(timer1_Tick); 计时器1.间隔=2000; timer1.Start(); } 私有无效计时器1_刻度(对象发送方,事件参数e) { timer1.Stop(); string[]port_List=SerialPort.GetPortNa
。。。
公共void InitTimer()
{
timer1=新系统.Timers.Timer();
timer1.appead+=新的ElapsedEventHandler(timer1_Tick);
计时器1.间隔=2000;
timer1.Start();
}
私有无效计时器1_刻度(对象发送方,事件参数e)
{
timer1.Stop();
string[]port_List=SerialPort.GetPortNames();
UpdateGridView(端口列表);
timer1.Start();
}
public void UpdateGridView(字符串[]端口列表)
{
Control.CheckForIllegalCrossThreadCalls=false;
程序员_GV.Rows.Clear();
foreach(端口列表中的字符串端口)
{
hx_通讯器=新的hx_通讯器(端口);
编程器_GV.Rows.Add(端口);
}
如果(程序员_GV.RowCount>0)
{
int index=Programmer_GV.CurrentRow.index;
程序员_GV.Rows[index].Selected=true;
}
其他的
{
//编程器_GV.Rows.Add(40);
}
}
...
当我运行代码时,会出现不同的异常
有时我得到的操作无法在此事件处理程序中执行。“
在线Programmer\u GV.Rows.Add(端口)代码>
有时提供的get行索引超出范围。
参数名称:行索引“
在线Programmer_GV.Rows.Clear()代码>
有时get指定的参数超出了有效值的范围。
第行程序员_GV.Rows.Clear()代码>
有时get“操作无效,因为它会导致对SetCurrentCellAddressCore函数的重入调用。”
在线程序员_GV.Rows.Clear()代码>
我想我的问题出在Programmer_GV.Rows.Clear()上代码>行。我在网上搜索并应用了一些其他的堆栈答案,但没有一个解决了我的问题
我搜索问题的部分链接:
您使用了错误类型的计时器。您正在使用一个没有线程关联性的线程来访问仅从UI线程访问的对象。您必须执行Control.CheckForIllegalCrossThreadCalls=false
这一事实应该告诉您这里需要知道的一切。如果从非UI线程的线程中触摸UI控件,会导致严重的种族冲突。那会导致非常糟糕的事情。基本上:不要这样做事实上,我怀疑您已经意识到了这一点,因为您已经添加了Control.CheckForIllegalCrossThreadCalls=false的“我不需要安全带”行代码>通常在调用Clear
方法时获取索引超出范围异常,这表明存在多线程问题:(这是搜索“IndexAutoFrangeException when calling Clear c#”时的第一个结果)@Damien_the_unsiver谢谢。你的解决方案帮我解决了问题