1

我对 .NET 中的线程非常陌生,并且对 Java 中的线程的接触有限。简而言之,我有一个有System.Windows.Forms.Timer对象的表单。计时器每 1000 毫秒计时一次。事件处理程序仅检查布尔类变量(即 processingResponseFiles)以确定处理请求文件的当前操作是否正在进行中。如果不在进行中,它应该处理任何请求文件。否则,它应该什么都不做。

ProcessRequestFiles方法查看请求,然后运行 ​​aBackgroundWorker来执行工作。我正在努力解决的问题是 processingResponseFiles 的值始终为 false,即使我在 ProcessingRequestFiles 方法的第一条语句中将其分配为 true。有人可以告诉我为什么 processingResponseFiles 的值总是假的,即使我在ProcessRequestFile()方法中设置它?

我需要保护此方法,使其不会被多次执行。

private void timerRequestTimer_Tick(object sender, EventArgs e)
{
    if (!processingResponseFiles)
    {
        ProcessRequestFile();                
    }

private void ProcessRequestFile()
{
    processingResponseFiles = true;

   // Process Request Files
   // If request type is Synchronize Customers
   // Run thread that synchronizes customers
   // If request type is Synchronize Items
   // Run thread that synchronizes items

   processingResponseFiles = false;
}
4

1 回答 1

2

不是很清楚,注释掉了太多东西,但显然需要false在 BackgroundWorker.RunWorkerCompleted 事件处理程序中将标志重置回。只有这样你才知道工作已经完成。或者只使用 BackgroundWorker.IsBusy 属性。

于 2012-09-28T20:59:25.337 回答