Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中断WaitForChanged事件_C#_Interrupt_Filesystemwatcher - Fatal编程技术网

C#中断WaitForChanged事件

C#中断WaitForChanged事件,c#,interrupt,filesystemwatcher,C#,Interrupt,Filesystemwatcher,我有一个处理机器自动化的程序。其中一个函数是等待生成文件,然后对其执行操作。我的问题是,如果有人取消了外部进程,文件将永远不会出现,我的程序将被卡住等待文件 我的表单上有一个“取消”按钮,该按钮将取消正在进行工作的backgroundWorker-取消在for循环的开始处进行检查,这是backgroundWorker的主要关键。 FileSystemWatcher方法是从backgroundWorker线程调用的,似乎不能像普通线程那样被中断 private void BackgroundWor

我有一个处理机器自动化的程序。其中一个函数是等待生成文件,然后对其执行操作。我的问题是,如果有人取消了外部进程,文件将永远不会出现,我的程序将被卡住等待文件

我的表单上有一个“取消”按钮,该按钮将取消正在进行工作的backgroundWorker-取消在
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 };