C# 一个线程实时监控类

对于c#接触差不多4个月,工作中用到是状态机和实时控制,下面线程实时监控的代码附上:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 
{
    public class AutomateThread
    {
        public static Thread StartNew(ThreadStart start)
        {
            Thread t = new Thread(start);
            t.Start();

            return t;
        }

        public static Result Monitor(int nTimeOutMS, ThreadStart start)
        {
            Stopwatch sw = Stopwatch.StartNew();

            Thread t = AutomateThread.StartNew(() => { start(); });

            while (sw.ElapsedMilliseconds < nTimeOutMS)
            {
                if (!t.IsAlive)
                {
                    return new Result(true, false);
                }
                else
                {
                    Thread.Sleep(30);
                }
            }

            return new Result(false, true);
        }

        public static Result MonitorAll(int nTimeOutMS, params ThreadStart[] threadStart)
        {
            Stopwatch sw = Stopwatch.StartNew();
            IList<Thread> threads = new List<Thread>();
            bool bFinish;

            foreach (var item in threadStart)
            {
                var t = AutomateThread.StartNew(item);
                threads.Add(t);
            }

            while (sw.ElapsedMilliseconds <= nTimeOutMS)
            {
                bFinish = true;
                foreach (var item in threads)
                {
                    if (item.IsAlive)
                    {
                        Thread.Sleep(30);
                        bFinish = false;
                    }
                }

                if (bFinish)
                {
                    return new Result(true, false);
                }
            }

            return new Result(false, true);
        }
        
        public static void  WaitAll(params Thread[] threads)
        {
            Stopwatch sw = Stopwatch.StartNew();

            foreach(Thread t in threads)
            {
                while(t != null && t.IsAlive)
                {
                    Thread.Sleep(30);
                }
            }
        }
    }
}

因为代码比较简单,就不作解释说明了。不明白处,可以留言。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
可以使用C#的FileSystemWatcher类来监控本地文件夹,然后使用多线程来读取TXT文件的内容。以下是一个简单的代码示例,演示如何使用FileSystemWatcher和多线程来实现此目标: ```csharp using System; using System.Collections.Generic; using System.IO; using System.Threading; class Program { static List<string> fileContents = new List<string>(); static void Main(string[] args) { string directoryPath = @"C:\example\"; FileSystemWatcher watcher = new FileSystemWatcher(directoryPath, "*.txt"); watcher.EnableRaisingEvents = true; watcher.Created += OnCreated; Console.WriteLine("Press 'q' to quit."); while (Console.Read() != 'q') ; } private static void OnCreated(object sender, FileSystemEventArgs e) { Thread thread = new Thread(() => { string[] lines = File.ReadAllLines(e.FullPath); foreach (string line in lines) { fileContents.Add(line); } Console.WriteLine("File {0} has been read.", e.Name); }); thread.Start(); } } ``` 在此示例中,我们首先创建了一个FileSystemWatcher对象来监控指定目录中的所有txt文件。然后,我们使用EnableRaisingEvents属性启用FileSystemWatcher对象的事件,然后订阅Created事件。当创建新的txt文件时,OnCreated方法将被调用,并在新的线程上读取txt文件的内容并将其存储在fileContents列表中。最后,我们打印一条消息,指示文件已被读取。 请注意,此示例中没有实现对fileContents列表的同步访问。如果多个线程同时访问列表,则可能会导致竞态条件和其他问题。要解决此问题,可以使用线程同步机制,如lock语句或Monitor类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值