从单独的类查看ThreadStatic变量

时间:2019-07-22 17:31:58

标签: c# multithreading

我有一个以我的主要形式声明的ThreadStatic变量,如下所示:

[ThreadStatic]
public bool _skipCurrent = false;

我已经执行了另一个功能,并使用以下代码将数据反馈到我的主表单中:

var updateMe = new Progress<RunProgressModel>(progress =>
{
    // This works
    lblTest.Text = progress.Message;
});

await Task.Run(() => monitor.Start(updateMe));

“ monitor.Start”在另一个项目的另一个类中,如下所示:

public void Start(IProgress<RunProgressModel> progress)
{
    var currentIndex = 0;
    var updateData = new RunProgressModel();

    foreach (var task in tasks)
    {
         bool done = false;

        while (!done)
        {
            // Perform tasks
            updateData.Message = "I did a thing.";
        }

        progress.Report(updateData);
    }
}

我需要从该线程内部访问_skipCurrent,以查看任务是否需要比平时更早完成该任务的处理,如何获取此Start函数以查看ThreadStatic变量?

我本质上希望用户能够单击“跳过”按钮,该按钮会将_skipCurrent设置为true,该线程跳过其当前任务,然后将变量设置为false。

1 个答案:

答案 0 :(得分:2)

ThreadStatic变量是一个静态变量,您可以像访问任何静态变量一样来访问它们,即MainForm._skipCurrent。但是,ThreadStatic变量将无法实现您想要的。每个线程都有自己的ThreadStatic变量副本以供使用。因此,如果用户单击UI线程中的“取消”按钮,并将MainForm._skipCurrent设置为true,则执行Start()的线程将看不到该值。

您想要的是使用普通的静态变量。