1
这里我有一个全局变量,它存储for循环的索引。这是一个漫长的过程,所以每个都在Task
内完成。在Task
里面,索引值被存储到一个变量中。在后台进程运行时,我有另一种从全局变量中获取值的方法。但它返回不正确。从主线程获取后台任务的数据
int myCount = -1;
Task BackgroundTask;
List<int> Count = new List<int>();
protected void Run_Click(object sender, EventArgs e)
{
BackgroundTask = new Task(() =>
{
for (int i = 0; i < 1000000; i++)
{
myCount = myCount + 1;
Thread.Sleep(1000);
}
});
BackgroundTask.Start();
}
protected void Check_Click(object sender, EventArgs e)
{
Count.Add(myCount);
}
这里同时访问变量myCount
的值总是返回-1当与Check_Click
方法完成。但线程仍在运行。为什么会这样,以及如何在不使变量静态的情况下获得计数值?
此代码按照您的意图工作。您是否确定在“点击”检查之前“点击”运行?即,在尝试检查修改后的“myCount”值之前,实际上需要运行该任务。 – Xenolightning
是的,我已经点击了check.and之前运行,因为线程睡了1秒,它不会快速运行循环 – Intruder
尝试发布一个完整的例子,也许在一个要点。我使用WinForms应用程序创建了简单的测试用例,并使用上面的确切代码,它可以按照您的预期工作。 – Xenolightning