我有一个以我的主要形式声明的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。
答案 0 :(得分:2)
ThreadStatic
变量是一个静态变量,您可以像访问任何静态变量一样来访问它们,即MainForm._skipCurrent
。但是,ThreadStatic
变量将无法实现您想要的。每个线程都有自己的ThreadStatic
变量副本以供使用。因此,如果用户单击UI线程中的“取消”按钮,并将MainForm._skipCurrent
设置为true
,则执行Start()
的线程将看不到该值。
您想要的是使用普通的静态变量。