C# 需要使用线程监视指定文件夹中的txt文件的帮助吗
我尝试了一些教程来解决我的问题。。。但这是一个非常有趣的故事- 代码如下:C# 需要使用线程监视指定文件夹中的txt文件的帮助吗,c#,multithreading,visual-studio-2010,C#,Multithreading,Visual Studio 2010,我尝试了一些教程来解决我的问题。。。但这是一个非常有趣的故事- 代码如下: private void btnMonitor_Click(object sender, EventArgs e) { lock (m_lock) { if (thread_isRunning) { thread_isAbortRequested = true; }
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();
}
是的,我实际上遵循这个方法:
这就是为什么我的代码是这样的
首先:
我的lil程序的目的是允许用户在文本框中输入一个路径,单击monitor按钮和BINGO,启动线程并持续监视指定文件夹中已确定的文件(本例中为txt),并将其添加到datagrid
实际上,它已经列在我的数据网格中。。问题是:当点击监视器按钮时,线程只会启动一次:(我想要的是像BAAZINGA一样每隔3秒更新一次文件!!(如果添加到ofc文件夹中)
正如你们所看到的,我是一个非常愚蠢的人,我在所有这些线程和调用、交叉线程等方面都有问题……你们知道
我不是在要求一个有效的代码,只是建议和技巧,使它成为一件很酷的事情
编辑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()的执行方法
DirectoryManager->这是我宝贵的类,有一个Execute(字符串路径),它调用ReadFiles(路径)和GetFiles(路径)
GetFiles是一个字符串列表,返回由ReadFiles()填充的_文件(字符串列表)
编辑3:
哦,我得到它刷新datagrid视图,但它使用的是windows.forms.timer
我知道没有定时器吗
OBS:对不起,我的英语太糟糕了,还有像noob一样的演技,哈哈,用一个?怎么样?正如你所发现的,一个后台线程只执行一次。你真的需要使用
文件系统监视程序或某种计时器
您的最佳选择(如果您不想使用FileSystemWatcher)是使用分派器
或BackgroundWorker
中的循环-对于您正在做的事情,我强烈推荐分派器,因为它在UI线程上处理,这意味着您可以安全地更新数据网格,而不会出现任何线程问题。是的,我以前已经使用过它……但这里的主要内容是:获取线程的基础知识!嘿,我已经使用过system.windows.timer,它运行得很好,使用这些计时器(线程中的计时器)是一件非常痛苦的事情…我猜这是目前的最终解决方案..先生,你告诉我dispastcher有道理..!哦,等等->ThreadPool.QueueUserWorkItem(BackgroundMethod);该行仍有问题,必须对其进行评论……如果这是线程的最终计时器解决方案呢