是否可以将新参数值传递给正在运行的线程?

时间:2010-10-26 21:17:27

标签: c# multithreading

我有一个线程,当前在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;
        }   
    }

1 个答案:

答案 0 :(得分:1)

当您选择其他选项卡时,您似乎需要在线程上运行不同的方法。在(开始)线程之前(而不是在线程中)做出选择。

除非你想让它更新DataGrid 控件(我没有读过,但看起来似乎有道理)。在这种情况下,您可以传递一个简单的布尔值作为参数(int object state参数)。

您没有发布最相关的Tread起始代码。