我对.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;
}
答案 0 :(得分:2)
目前还不是很清楚,有太多东西被注释掉了,但显然需要在BackgroundWorker.RunWorkerCompleted事件处理程序中将标志重置回false
。只有这样你才知道工作已经完成。或者只使用BackgroundWorker.IsBusy属性。