【发布时间】:2015-11-17 03:27:50
【问题描述】:
这里有一个全局变量,用于存储 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 的值时,使用Check_Click 方法完成时总是返回-1。但线程仍在运行。为什么会这样?如何在不使变量变为静态的情况下获得计数值?
【问题讨论】:
-
此代码按您的预期工作。您确定在“单击”检查之前“单击”运行吗?即在尝试检查更改后的
myCount值之前,该任务实际上需要运行。 -
是的,我在检查之前点击了运行。当线程休眠 1 秒时,它不会很快用完循环
-
尝试发布一个完整的例子,也许是一个要点。我使用 WinForms 应用程序创建了简单的测试用例,并使用上面的确切代码,它可以按您的预期工作。
-
我也在 Windows 窗体应用程序中尝试了确切的代码...但是 myCount 值在单击“检查”按钮时始终显示 -1。你尝试将变量设为静态
标签: c# parallel-processing task-parallel-library