C#中断WaitForChanged事件
我有一个处理机器自动化的程序。其中一个函数是等待生成文件,然后对其执行操作。我的问题是,如果有人取消了外部进程,文件将永远不会出现,我的程序将被卡住等待文件 我的表单上有一个“取消”按钮,该按钮将取消正在进行工作的backgroundWorker-取消在C#中断WaitForChanged事件,c#,interrupt,filesystemwatcher,C#,Interrupt,Filesystemwatcher,我有一个处理机器自动化的程序。其中一个函数是等待生成文件,然后对其执行操作。我的问题是,如果有人取消了外部进程,文件将永远不会出现,我的程序将被卡住等待文件 我的表单上有一个“取消”按钮,该按钮将取消正在进行工作的backgroundWorker-取消在for循环的开始处进行检查,这是backgroundWorker的主要关键。 FileSystemWatcher方法是从backgroundWorker线程调用的,似乎不能像普通线程那样被中断 private void BackgroundWor
for
循环的开始处进行检查,这是backgroundWorker
的主要关键。
FileSystemWatcher
方法是从backgroundWorker
线程调用的,似乎不能像普通线程那样被中断
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i<listBox1.Items.Count;i++)
{
//check for stop
if (backgroundWorker1.CancellationPending)
break;
switch (LineItm[0])
{
case "OUTPUT":
{
// do stuff
}
case "LOOP":
{
//do stuff
}
case "LOOP UNTIL":
{
\\ do stuff
}
case "WAIT":
{
switch ()
{
case "INPUT":
// do stuff
case "TIME":
//do stuff
case "RESULT":
//find result file
string csv = WaitforFile(ResultPath);
if (csv == "")
{
MessageBox.Show("Result timeout!", "Timeout", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Result_File = csv;
Thread.Sleep(100);
break;
}
break;
}
case "FUNCTION":
{
// do stuff
}
}
}
private string WaitforFile(string dir)
{
using (var watcher = new FileSystemWatcher(dir, "*.csv"))
{
watcher.EnableRaisingEvents = true;
var watcherCreatedFile = watcher.WaitForChanged(WatcherChangeTypes.Created);
//this will wait for a file to be created
if (watcherCreatedFile.ChangeType == WatcherChangeTypes.Created)
{
//will trigger when a file is created
string fileNameCreated = watcherCreatedFile.Name;
return fileNameCreated;
}
}
return "";
}
private void BackgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
对于(int i=0;i您可以创建一个从BackgroundWorker继承的类。该类将包含一个用于“信号关闭”的bool,在这种情况下,您可以检查该bool并终止该工作程序。也许其他人会在管理取消令牌方面有更好的答案
编辑-查看一些线程,确保像这样初始化BackgroundWorker
var worker = new BackgroundWorker { WorkerSupportsCancellation = true };