标题:多线程咋个监控啊?
只看楼主
hhy420459674
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:203
专家分:179
注 册:2010-4-9
结帖率:54.9%
已结贴  问题点数:20 回复次数:5 
多线程咋个监控啊?
有个文件夹A  下面有很多个文件夹  每个文件夹下面可以有文件
我的需求是:监控A下面的每个文件夹中是否有没有文件,如果有,则以二进制的方式保存至数据库,然后删除,
老大说  得随时监控每个文件夹下是否有文件,所以得用多线程处理
请问各位  咋个处理啊?给我个思路吧,我第一次用多线程,没得点思路...
谢谢!
搜索更多相关主题的帖子: 多线程 数据库 二进制 文件夹 
2011-01-10 15:58
yms123
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
得分:7 
可以造一个Windows系统服务程序来实现,前提是服务器上能安装系统服务
2011-01-10 23:30
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:7 
程序代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using using System.Collections;

namespace Thread_FileSystemWatcher
{
    class Program
    {
        private static Thread[] threads;
        private static string[] pPath;
       
        static void Main(string[] args)
        {
            threadsPEIZHI();
            while (Console.Read() != 'q') ;

        }

        static void threadsPEIZHI()
        {
            try
            {
                pPath = new string[2];
                pPath[0] = "c:\\";
                pPath[1] = "e:\\";

                threads = new Thread[pPath.Length];
                for (int i = 0; i <= threads.Length-1; i++)
                {
                    threads[i] = new Thread(Run);
                    threads[i].Name = pPath[i];
                    threads[i].Start();
                    Console.WriteLine(threads[i].Name);
                }
            }
            catch(Exception Ex)
            {
                Console.WriteLine(Ex.Message);
            }
        }

        static void Run()
        {
            Run(Thread.CurrentThread.Name);
        }

        static void Run(string pPath)
        {
            FileSystemWatcher fsw = new FileSystemWatcher(pPath);
            fsw.Filter = "*.*";//监控所有类型,包括子文件夹
            fsw.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.LastAccess | NotifyFilters.LastWrite;

            fsw.Changed += new FileSystemEventHandler(OnChanged);
            fsw.Created += new FileSystemEventHandler(OnCreated);
            fsw.Deleted += new FileSystemEventHandler(OnDeleted);
            fsw.Renamed += new RenamedEventHandler(OnRenamed);

            fsw.EnableRaisingEvents = true;//开启监控

        }

        static void OnChanged(object source,FileSystemEventArgs e)
        {
            Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
        }

        static void OnCreated(object source,FileSystemEventArgs e)
        {
            Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
        }

        static void OnDeleted(object source,FileSystemEventArgs e)
        {
            Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
        }

        static void OnRenamed(object source, RenamedEventArgs e)
        {
            Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
        }

    }
}



出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2011-01-13 10:50
Issac_abc
Rank: 4
来 自:河南
等 级:业余侠客
威 望:2
帖 子:155
专家分:218
注 册:2010-6-17
得分:7 
.
2011-01-14 13:48
hhy420459674
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:203
专家分:179
注 册:2010-4-9
得分:0 
回复 3楼 wangnannan
谢谢版主,我按照你的方法是实现了多线程读取文件夹下面的文件
但是有个问题:因为是多线程,所以就出现了同一个文件就可能被多个线程而访问,因而报错:该文件正在被另一进程使用
所以我就想:有什么办法可以让已经在用线程读取了的文件给锁住,以免被其他线程访问,当读取完文件后,再将其解开!O(∩_∩)O谢谢
2011-01-17 13:17
lisj_1213
Rank: 2
等 级:论坛游民
帖 子:14
专家分:55
注 册:2010-11-18
得分:0 
直接Lock就行了
2011-01-19 14:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-330899-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.790155 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved