计时器对象和BackgroundWorker

时间:2012-09-28 20:52:37

标签: c# winforms multithreading timer backgroundworker

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

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

我需要保护此方法,以便不会多次执行。

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;
}

1 个答案:

答案 0 :(得分:2)

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