Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
行上的C#超出范围异常。清除()_C# - Fatal编程技术网

行上的C#超出范围异常。清除()

行上的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

在我的应用程序中,我有一个代码,可以按如下间隔刷新GridView:

。。。
公共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谢谢。你的解决方案帮我解决了问题