【问题标题】:Need help using a thread to monitor txt files in specified folder需要帮助使用线程来监视指定文件夹中的 txt 文件
【发布时间】:2010-12-16 15:30:50
【问题描述】:

我已经尝试了几个教程来解决我的问题...但它是如此的大和 phat 一个 -.-

代码如下:

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 新文件之类的东西!!(如果添加到文件夹)

正如你们所见,我很菜鸟,而且我在所有这些线程和调用、跨线程问题等方面都遇到了问题……你知道的!

我不是要一个有效的代码,只是建议和技巧让它成为一件很酷的事情

编辑 1:

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

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

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

编辑 2:

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

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

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

DirectoryManager -> 这是我宝贵的课程,有一个Execute(string path),它调用ReadFiles(path) 和GetFiles(path)..

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

编辑 3:

eww,我得到它刷新数据网格视图,但它使用 windows.forms.timer..

没有计时器有什么想法吗?

OBS:对不起我糟糕的英语和像菜鸟一样的表演 LOL

【问题讨论】:

    标签: c# multithreading visual-studio-2010


    【解决方案1】:

    如您所见,后台线程只会执行一次。您确实需要使用FileSystemWatcher 或某种计时器。

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

    【讨论】:

    • 嘿,我已经使用了 system.windows.timer,它在 atm 上运行得很好,使用这些计时器(线程中的计时器)真是太痛苦了。猜猜这是现在的最终解决方案..先生,您有道理告诉我调度员..!
    • 哦等等 -> ThreadPool.QueueUserWorkItem(BackgroundMethod);那条线仍然有问题,不得不评论它......如果那是线程的终极计时器解决方案 woohoo
    【解决方案2】:

    使用FileSystemWatcher 怎么样?

    【讨论】:

    • 是的,我之前已经用过...但这里的主要内容是:获取线程基础知识!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多