C# 是否可以将新参数值传递到正在运行的线程中?
我有一个线程当前更新TabControl的一个选项卡(状态)上的DataGridView。这个线程目前运行得很好。如果在同步过程中单击运行线程的按钮,我想做的是能够更新不同选项卡上的一小部分控件(同步)。标签。我考虑在C# 是否可以将新参数值传递到正在运行的线程中?,c#,multithreading,C#,Multithreading,我有一个线程当前更新TabControl的一个选项卡(状态)上的DataGridView。这个线程目前运行得很好。如果在同步过程中单击运行线程的按钮,我想做的是能够更新不同选项卡上的一小部分控件(同步)。标签。我考虑在thread.Start()处向线程传递一个整数,但是我不确定如何在线程启动后更改int参数,在本例中,该参数是TabControl.SelectedIndex属性。这是一个问题,因为切换选项卡会挂起线程,但不允许传入新的选项卡索引 我可能会将这个功能分解成一个不同的线程,只有在同
thread.Start()
处向线程传递一个整数,但是我不确定如何在线程启动后更改int
参数,在本例中,该参数是TabControl.SelectedIndex
属性。这是一个问题,因为切换选项卡会挂起线程,但不允许传入新的选项卡索引
我可能会将这个功能分解成一个不同的线程,只有在同步时才会启动它。选项卡,但所有设备查询功能都已在现有线程中处理。我有点反对为了快速解决问题而复制功能
下面是我为“解决”这个问题而设计的函数,但它无效,因为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;
}
}
void writeTable(int-tabIndex)
{
如果(需要调用)
{
BeginInvoke(新的ctrlStatDel(可写)、tabIndex);
返回;
}
开关((应用选项卡)选项卡索引)
{
案例appTabs.STATUS:
inti4=0;
ctrlProgBar.Value=0;
for(inti2=0;i2<4;i2++)
{
对于(inti3=0;i3<10;i3++)
{
statusDGV.CurrentCell=statusDGV[i2,i3];
statusDGV.CurrentCell.Value=colFields[i4];
i4++;
}
ctrlProgBar.PerformStep();
}
statusDGV.CurrentCell=null;
打破
案例appTabs.SYNCH:
for(int idx=0;idx
当选择另一个选项卡时,您似乎需要在线程上运行不同的方法。在启动线程时(之前)进行选择,而不是在线程中
除非你想让它更新DataGrid和控件(我没有读到,但看起来似乎有道理)。在这种情况下,您可以传递一个简单的布尔值作为参数(intobjectstate
参数)
您没有发布最相关的踏板起始代码 如果线程正在使用一个类级变量,那么您是否可以简单地使tab索引,然后允许tab_changed事件设置该变量?只要我们只讨论整数,其他线程影响UI或死锁或其他任何事情都不会有任何问题。