需要帮助使用线程来监视指定文件夹中的txt文件

时间:2010-12-16 15:30:50

标签: c# multithreading visual-studio-2010

我已经尝试了很少的教程来解决我的问题...但是它就是这样一个biig和phat one -.-

以下是代码:

private void btnMonitor_Click(object sender, EventArgs e)
    {
        lock (m_lock)
        {
            if (thread_isRunning)
            {
                thread_isAbortRequested = true;
            }
            else
            {
                thread_isAbortRequested = false;
                thread_isRunning = true;
                ThreadPool.QueueUserWorkItem(BackgroundMethod);
            }
        }
        //StartMonitoring();
    }

是的,我实际上是遵循这个方法:How to start thread if button pressed and stop it if pressed again?

这就是为什么我的代码是这样的。

首先:

我的lil程序的目的是允许用户在文本框中输入路径,单击监视器按钮和BINGO,线程开始并继续监视指定文件夹中的确定文件(在本例中为txt),并且将它们添加到数据网格中。

实际上它已经在我的数据网格中列出..问题是:当点击监视器按钮时,线程只启动一次:(我想要像每3秒BAAZINGA新文件!!(如果添加在文件夹ofc)

我很漂亮,因为你们可以看到,我遇到所有这些线程和调用问题,交叉问题等等......你知道!

我不是要求一个有效的代码,只是建议和提示,使它成为一件很酷的事情

编辑1:

目前,唯一有错误的行是:ThreadPool.QueueUserWorkItem(BackgroundMethod);

错误列表说: 错误1'System.Threading.ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback)'的最佳重载方法匹配有一些无效的参数;

错误2参数1:无法从'方法组'转换为'System.Threading.WaitCallback';

编辑2:

该程序有3个主要类(不是主要的LOL),它们是:

Form.cs - >在我设置按钮事件的地方,调用我的特殊方法

ViewerManager - >实际上,我不确定这个...我添加了构造函数和一个从DirectoryManager类调用GetFiles()的Execute方法

DirectoryManager - >这个是我宝贵的类,有一个Execute(字符串路径),它调用ReadFiles(path)和GetFiles(path)..

GetFiles是一个字符串列表,并返回_files(字符串列表),由ReadFiles()填充。

编辑3:

eww,我让它刷新了datagrid视图,但它使用的是windows.forms.timer ..

我知道没有定时器吗?

OBS:对不起我可怕的英语和像诺布一样的表演LOL

2 个答案:

答案 0 :(得分:1)

正如您所发现的,后台线程只会执行一次。你真的需要使用FileSystemWatcher或某种计时器。

你最好的选择(如果你不想使用FileSystemWatcher)是使用DispatcherTimerBackgroundWorker内的循环 - 对于你正在做的事情,我强烈推荐DispatcherTimer,它在UI线程上处理,这意味着您可以安全地更新您的数据网格而不会出现任何线程问题。

答案 1 :(得分:0)

如何使用FileSystemWatcher