Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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#_Multithreading - Fatal编程技术网

C# 是否可以将新参数值传递到正在运行的线程中?

C# 是否可以将新参数值传递到正在运行的线程中?,c#,multithreading,C#,Multithreading,我有一个线程当前更新TabControl的一个选项卡(状态)上的DataGridView。这个线程目前运行得很好。如果在同步过程中单击运行线程的按钮,我想做的是能够更新不同选项卡上的一小部分控件(同步)。标签。我考虑在thread.Start()处向线程传递一个整数,但是我不确定如何在线程启动后更改int参数,在本例中,该参数是TabControl.SelectedIndex属性。这是一个问题,因为切换选项卡会挂起线程,但不允许传入新的选项卡索引 我可能会将这个功能分解成一个不同的线程,只有在同

我有一个线程当前更新TabControl的一个选项卡(状态)上的DataGridView。这个线程目前运行得很好。如果在同步过程中单击运行线程的按钮,我想做的是能够更新不同选项卡上的一小部分控件(同步)。标签。我考虑在
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和控件(我没有读到,但看起来似乎有道理)。在这种情况下,您可以传递一个简单的布尔值作为参数(int
objectstate
参数)


您没有发布最相关的踏板起始代码

如果线程正在使用一个类级变量,那么您是否可以简单地使tab索引,然后允许tab_changed事件设置该变量?只要我们只讨论整数,其他线程影响UI或死锁或其他任何事情都不会有任何问题。