Winform 异步调用2 时间
阅读原文时间:2023年07月09日阅读:2

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

using System.Collections;

using System.Threading;

using System.Threading.Tasks;

using System.Xml;

namespace WorkFlow

{

    public partial class Server : Form

    {

        private delegate void FlushClient();//代理

        private delegate void ReadTime(); //设置时间代理

        Thread thread = null;

        Thread threadTime = null; //计时器

        int counter = 0;

        private static readonly string startTime = DateTime.Now.ToString();

        public Server()

        {

            InitializeComponent();

        }

        ///

        /// 加载load事件

        ///

        ///

        ///

        private void Server_Load(object sender, EventArgs e)

        {

            DoWorkList();

            this.txtSetTime.Text = Convert.ToString(getTimeValue());

            DoWorkTime();

        }

        #region 加载运行日志列表

        ///

        /// 线程工作

        ///

        public void DoWorkList()

        {

            thread = new Thread(CrossThreadFlush);

            thread.IsBackground = true;

            thread.Start();

        }

        private void CrossThreadFlush()

        {

            while (true)

            {   //将sleep和无限循环放在等待异步的外面

                Thread.Sleep(getTimeValue());

                ThreadFuntion();

            }

        }

        ///

        /// 获取数据

        ///

        ///

        public void ThreadFuntion()

        {

            if (this.dtReadList.InvokeRequired)//等待异步

            {

                FlushClient fc = new FlushClient(ThreadFuntion);

                this.Invoke(fc); //通过代理调用刷新方法

            }

            else

            {

                counter += 1;

                WorkFlow workflow = new WorkFlow();

                Hashtable ht = new Hashtable();

                //   ht.Add("ID","");

                //   workflow.SaveWorkFlow(ht);

                int index = this.dtReadList.Rows.Add();

                this.dtReadList.Rows[index].Cells[0].Value = DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss");

                this.dtReadList.Rows[index].Cells[1].Value = counter; //workflow.GetAllOrderData().Tables[0].Rows.Count ;

            }

        }

        #endregion

        #region 查看程序已运行时间

        ///

        /// 加载

        ///

        public void DoWorkTime()

        {

            this.lblTime.Text = DateTime.Now.ToString("yyyy年mm月dd日 HH:mm:ss");

            threadTime = new Thread(timeThread);//开启时间线程

            threadTime.IsBackground = true;

            threadTime.Start();

        }

        ///

        /// 时间线程

        ///

        private void timeThread()

        {

            while (true)

            {   //将sleep和无限循环放在等待异步的外面

                Thread.Sleep(1000);

                TimeThreadFuntion();

            }

        }

        ///

        /// 时间计算方式

        ///

        public void TimeThreadFuntion()

        {

            if (this.dtReadList.InvokeRequired)//等待异步

            {

                FlushClient fc = new FlushClient(TimeThreadFuntion);

                this.Invoke(fc); //通过代理调用刷新方法

            }

            else

            {

                DateTime beginTime1 = DateTime.Parse(startTime);

                DateTime endTime1 = DateTime.Parse(DateTime.Now.ToString());

                TimeSpan midTime = endTime1 - beginTime1;

                this.txtGetTime.Text = midTime.ToString();

            }

        }

        #endregion

        #region 设置每次执行的时间

        ///

        /// 设置时间

        ///

        ///

        ///

        private void btnSetTime_Click(object sender, EventArgs e)

        {

            Thread.Sleep(3000);

            XmlDocument xmlDoc = new XmlDocument();  //声明xml

            xmlDoc.Load("SetTimeXMLFile.xml");

            //获取bookshop节点的所有子节点 

            XmlNodeList nodeList = xmlDoc.SelectSingleNode("setTime").ChildNodes;

            //遍历所有子节点 

            foreach (XmlNode xn in nodeList)

            {

                XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型 

                XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点 

                foreach (XmlNode xn1 in nls)//遍历 

                {

                    XmlElement xe2 = (XmlElement)xn1; //转换类型

                    if (xe2.Name == "value")//如果找到 

                    {

                        xe2.InnerText = this.txtSetTime.Text;//则修改 

                        break;

                    }

                }

            }

            xmlDoc.Save("SetTimeXMLFile.xml"); //保存其更改

            MessageBox.Show("设置成功");

            Thread.Sleep(1000);

        }

        ///

        /// 获取时间

        ///

        ///

        public static int getTimeValue()

        {

            int time = 50000;

            XmlDocument xmlDoc = new XmlDocument();  //声明xml

            xmlDoc.Load("SetTimeXMLFile.xml");

            //获取bookshop节点的所有子节点 

            XmlNodeList nodeList = xmlDoc.SelectSingleNode("setTime").ChildNodes;

            //遍历所有子节点 

            foreach (XmlNode xn in nodeList)

            {

                XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型 

                XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点 

                foreach (XmlNode xn1 in nls)//遍历 

                {

                    XmlElement xe2 = (XmlElement)xn1; //转换类型

                    if (xe2.Name == "value")//如果找到 

                    {

                        time = Convert.ToInt32(xe2.InnerText);

                        break;

                    }

                }

            }

            return time;

        }

        #endregion

    }

}