我有一个线程,当前在TabControl的一个选项卡(STATUS)上更新DataGridView。该线程目前运行良好。如果在SYNCH上单击运行线程的按钮,我想要做的是能够在不同的选项卡(SYNCH。)上更新一小组控件。标签。我考虑将一个整数传递给Thread.Start()
的线程,但后来我不确定如何在线程之后更改int
参数,在本例中是TabControl.SelectedIndex
属性已经开始了。这是一个问题,因为切换标签会挂起线程,但不允许传入新的标签索引。
我可能会将此功能分解为一个不同的线程,我只能在SYNCH上启动。选项卡,但已在现有线程中处理所有设备查询功能。我有点不喜欢复制功能以便快速解决方法。
以下是我策划的“解决”问题的功能,但它无效,因为tabIndex
变量设置为Thread.Start
,我目前无法更改它。有办法解决这个问题吗?
void writeTable(int tabIndex)
{
if (InvokeRequired)
{
BeginInvoke(new ctrlStatDel(writeTable), tabIndex);
return;
}
switch((appTabs)tabIndex)
{
case appTabs.STATUS:
int i4 = 0;
ctrlProgBar.Value = 0;
for (int i2 = 0; i2 < 4; i2++)
{
for (int i3 = 0; i3 < 10; i3++)
{
statusDGV.CurrentCell = statusDGV[i2, i3];
statusDGV.CurrentCell.Value = colFields[i4];
i4++;
}
ctrlProgBar.PerformStep();
}
statusDGV.CurrentCell = null;
break;
case appTabs.SYNCH:
for (int idx = 0; idx < statFields.Count; idx++)
statControls[idx].Text = statFields[idx];
break;
}
}
答案 0 :(得分:1)
当您选择其他选项卡时,您似乎需要在线程上运行不同的方法。在(开始)线程之前(而不是在线程中)做出选择。
除非你想让它更新DataGrid 和控件(我没有读过,但看起来似乎有道理)。在这种情况下,您可以传递一个简单的布尔值作为参数(int object state
参数)。
您没有发布最相关的Tread起始代码。