C# 线程操作

简介: using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using BLL;
using Model;
using log4net;
using System.Windows.Forms;

namespace TerminalAccessService
{
    public partial class TerminalAccessForm : Form
    {
        private readonly ILog _log;
        AlarmInfoBLL _alarmInfoBll = new AlarmInfoBLL();
        AuditRecordsBLL _auditRecordsBll = new AuditRecordsBLL();
        AuditRecordsHistoryBLL _auditRecordsHistoryBll = new AuditRecordsHistoryBLL();
        AuditStrategyInfoBLL _auditStrategyInfoBll = new AuditStrategyInfoBLL();
        AuditAccessClientInfoBLL _auditAccessClientInfoBll = new AuditAccessClientInfoBLL();
        VlanBLL _vlanBll = new VlanBLL();
        private Thread thread;
        private bool flag = true;
        public TerminalAccessForm()
        {
            InitializeComponent();
            try
            {
                thread = new Thread(Init);
            }
            catch (Exception)
            {
                flag = false;
            }
            _log = LogManager.GetLogger("TerminalAccessForm");
        }

        /// <summary>
        /// 初始化线程
        /// </summary>
        public void Init()
        {
            while (flag)
            {
                ExecuteFunction();
                Thread.Sleep(5000);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_start_Click(object sender, EventArgs e)
        {
            thread.Start();
            tbx_content.Text += "正在启动服务,请稍候...";
        }

        /// <summary>
        /// 线程固定时间执行方法
        /// </summary>
        public void ExecuteFunction()
        {
            try
            {
                //从sqlserver获取数据
                var data = _alarmInfoBll.Query();
                foreach (var alarmInfo in data)
                {
                    ReadData(alarmInfo);
                    ProcessData(alarmInfo);
                }
            }
            catch (Exception)
            {
                flag = false;
            }
        }

        /// <summary>
        /// 过程一:读取数据
        /// </summary>
        /// <param name="alarmInfo"></param>
        public void ReadData(AlarmInfo alarmInfo)
        {
            //从mysql获取数据
            var tmp = _auditRecordsBll.IsExist(new AuditRecord()
            {
                Ip = alarmInfo.Ip,
                Mac = alarmInfo.Mac,
                ClrType = alarmInfo.Type
            });
            if (tmp != null)
            {
                tmp.ClrTime = DateTime.Now.ToString();
                _auditRecordsBll.Update(tmp);
                _auditRecordsHistoryBll.Save(new AuditRecordsHistory()
                {
                    Ip = alarmInfo.Ip,
                    Mac = alarmInfo.Mac,
                    ClrType = alarmInfo.Type,
                    ClrMsg = alarmInfo.Msg,
                    ClrTime = alarmInfo.AlarmTime
                });
            }
            else
            {
                _auditRecordsBll.Save(new AuditRecord()
                {
                    Ip = alarmInfo.Ip,
                    Mac = alarmInfo.Mac,
                    ClrType = alarmInfo.Type,
                    ClrMsg = alarmInfo.Msg,
                    ClrTime = alarmInfo.AlarmTime.ToString()
                });
            }
        }

        /// <summary>
        /// 过程二:处理数据
        /// </summary>
        /// <param name="alarmInfo"></param>
        public void ProcessData(AlarmInfo alarmInfo)
        {
            var data2 = _auditStrategyInfoBll.QueryByType(alarmInfo.Type);
            var memo = "";
            if (data2.IsAccess == 0)
            {
                memo = "自动禁止准入";
                var ipManService = new IpManService.IpManService();
                var data = _vlanBll.QueryCoreSwitch(alarmInfo.Ip);
                foreach (var vlanBindDefaultSwtich in data)
                {
                    var tmp = ipManService.DisableIp(alarmInfo.Ip, alarmInfo.Mac, vlanBindDefaultSwtich.Switch);
                }
            }
            _auditAccessClientInfoBll.Save(new AuditAccessClientInfo()
            {
                ClientIp = alarmInfo.Ip,
                ClientMac = alarmInfo.Mac,
                ClientName = alarmInfo.DeviceName,
                IsAccess = int.Parse(alarmInfo.Type),
                Memo = memo
            });
        }

        private void btn_end_Click(object sender, EventArgs e)
        {
            thread.Abort();
            tbx_content.Text += "\r\n正在关闭服务,请稍候...\r\n";
        }
    }
}

 

目录
相关文章
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
380 3
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
309 1
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
193 0
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
482 0
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
730 0
|
Java C#
C#学习系列相关之多线程(五)----线程池ThreadPool用法
C#学习系列相关之多线程(五)----线程池ThreadPool用法
824 0
|
5月前
|
机器学习/深度学习 监控 算法
局域网行为监控软件 C# 多线程数据包捕获算法:基于 KMP 模式匹配的内容分析优化方案探索
本文探讨了一种结合KMP算法的多线程数据包捕获与分析方案,用于局域网行为监控。通过C#实现,该系统可高效检测敏感内容、管理URL访问、分析协议及审计日志。实验表明,相较于传统算法,KMP在处理大规模网络流量时效率显著提升。未来可在算法优化、多模式匹配及机器学习等领域进一步研究。
169 0
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

热门文章

最新文章