C# 从单独的类查看ThreadStatic变量
我在主窗体中声明了一个ThreadStatic变量,如下所示:C# 从单独的类查看ThreadStatic变量,c#,multithreading,C#,Multithreading,我在主窗体中声明了一个ThreadStatic变量,如下所示: [ThreadStatic] public bool _skipCurrent = false; 我已经执行了另一个函数,并使用以下代码将数据反馈到我的主窗体: var updateMe = new Progress<RunProgressModel>(progress => { // This works lblTest.Text = progress.Message; }); await T
[ThreadStatic]
public bool _skipCurrent = false;
我已经执行了另一个函数,并使用以下代码将数据反馈到我的主窗体:
var updateMe = new Progress<RunProgressModel>(progress =>
{
// This works
lblTest.Text = progress.Message;
});
await Task.Run(() => monitor.Start(updateMe));
var updateMe=新进度(进度=>
{
//这很有效
lblTest.Text=progress.Message;
});
wait 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);
}
}
public void启动(IProgress进程)
{
var currentIndex=0;
var updateData=new RunProgressModel();
foreach(任务中的var任务)
{
bool done=false;
而(!完成)
{
//执行任务
updateData.Message=“我做了一件事。”;
}
进度报告(更新数据);
}
}
我需要从该线程内部访问_skipCurrent,以查看任务是否需要比正常情况下更早地完成该任务的处理,如何让这个Start函数查看ThreadStatic变量
我基本上希望用户能够单击一个“跳过”按钮,该按钮可以将_skipCurrent设置为true,线程将跳过其当前任务,然后将变量设置回false。线程静态变量是一个静态变量,您可以像任何静态变量一样访问它,即
MainForm。_skipCurrent
。但是,ThreadStatic
变量将无法实现您想要的功能。每个线程都有自己的ThreadStatic
变量副本可供使用。因此,如果用户单击UI线程中的取消按钮,并将MainForm.\u skipCurrent
设置为true
,则执行Start()
的线程将看不到该值
您需要使用一个普通的静态变量。ThreadStatic变量是一个静态变量,您可以像访问任何静态变量一样访问它,即
MainForm.\u skipCurrent
。但是,ThreadStatic
变量将无法实现您想要的功能。每个线程都有自己的ThreadStatic
变量副本可供使用。因此,如果用户单击UI线程中的取消按钮,并将MainForm.\u skipCurrent
设置为true
,则执行Start()
的线程将看不到该值
您想要的是使用一个普通的静态变量。真不敢相信它这么简单,谢谢您的时间。@MrDTuring-不客气!很高兴我能帮忙!真不敢相信这么简单,谢谢你抽出时间。@MrDTuring-不客气!很高兴我能帮忙!