C# 线程操作-阿里云开发者社区

开发者社区> awbeci> 正文

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";
        }
    }
}

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10095 0
Java多线程--线程操作范例
<h1>1、实例要求</h1> <div> <span style="white-space:pre"></span>设计一个线程操作类,要求可以产生三个线程对象,并可以分别设置三个线程的休眠时间:</div> <div> <span style="white-space:pre"></span>线程A : 休眠10秒</div> <div> <span style="white-s
874 0
表格存储 SQL 操作实战
表格存储做为一款结构化存储系统,近期发布了新功能 SQL,大幅简化了查询的门槛,用户无需学习繁琐的 SDK,也不用区分表,索引等不同的接口,可以像访问传统的 MySQL 这类数据库一样,使用 SQL 的方式访问云原生的结构化大数据存储。下面我们就来具体实操下,看看查询用起来顺不顺手。
93 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10886 0
QT绘图的底层操作
绘图的底层操作LCD屏幕上的每个点都与显示缓冲区中的数据有特定的关系,对16位色的显示缓冲区,每两个字节对应LCD上的一个像素,因此我们只要修改缓冲区某两个地址上的数据就可以改变LCD上这个点的色彩,如果我们能够得到这个显示缓冲区的地址,应用程序编写者就可以抛开驱动程序那些抽象的接口,直接对显示缓冲区操作。
882 0
在C#中子线程如何操作主线程中窗体上控件
                                                       在C#中子线程如何操作主线程中窗体上控件         在C#中,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了Invoke的方法,其作用就是让子线程告诉窗体线程来完成相应的控件操作。
1044 0
封装多线程处理大量数据操作
们需要解决WaitAny和取得异步执行的返回值的问题。地球人都知道Thread和ThreadPool接受的委托都是没有返回值的。要想取的返回值,我们就得自己动手了,我们需要构造一个AsyncContext类,由这个类来保存异步执行的状态以并存储返回值。
619 0
+关注
awbeci
我的名字叫张威(多好听的名字啊),毕业于哈弗大学(之前和比尔&middot;盖次是同学,自从那家伙创立了威软,我和他的关系就不太好,我发誓要打败他,然后进入安徽机电职业技术学院学习软件技术,你们觉得我会成功么), 现在在一家世界五百强公司任职UFO(想问我是什么公司?叫合肥优尔电子科技有限公司
590
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载