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();
        }
        /// <summary>
        /// 加载load事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Server_Load(object sender, EventArgs e)
        {
            DoWorkList();
            this.txtSetTime.Text = Convert.ToString(getTimeValue());
            DoWorkTime();
        }
        #region 加载运行日志列表
        /// <summary>
        /// 线程工作
        /// </summary>
        public void DoWorkList()
        {
            thread = new Thread(CrossThreadFlush);
            thread.IsBackground = true;
            thread.Start();
        }
        private void CrossThreadFlush()
        {
            while (true)
            {   //将sleep和无限循环放在等待异步的外面
                Thread.Sleep(getTimeValue());
                ThreadFuntion();
            }
        }
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <returns></returns>
        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 查看程序已运行时间
        /// <summary>
        /// 加载
        /// </summary>
        public void DoWorkTime()
        {
            this.lblTime.Text = DateTime.Now.ToString("yyyy年mm月dd日 HH:mm:ss");
            threadTime = new Thread(timeThread);//开启时间线程
            threadTime.IsBackground = true;
            threadTime.Start();
        }
        /// <summary>
        /// 时间线程
        /// </summary>
        private void timeThread()
        {
            while (true)
            {   //将sleep和无限循环放在等待异步的外面
                Thread.Sleep(1000);
                TimeThreadFuntion();
            }
        }
        /// <summary>
        /// 时间计算方式
        /// </summary>
        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 设置每次执行的时间
        /// <summary>
        /// 设置时间
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        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);
        }
        /// <summary>
        /// 获取时间
        /// </summary>
        /// <returns></returns>
        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
    }
}

Winform 异步调用2 时间的更多相关文章

  1. 一个简单的webservice的demo(下)winform异步调用webservice

    绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...

  2. Winform 异步调用

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. 用Html5/CSS3做Winform,一步一步教你搭建CefSharp开发环境(附JavaScript异步调用C#例子,及全部源代码)上

    本文为鸡毛巾原创,原文地址:http://www.cnblogs.com/jimaojin/p/7077131.html,转载请注明 CefSharp说白了就是Chromium浏览器的嵌入式核心,我们 ...

  4. WinForm查询大数据界面假死,使用异步调用解决

    用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后 ...

  5. .Net组件程序设计之异步调用

    .Net组件程序设计之异步调用 说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和BeginInvoke(), 要想让自己的组件可以被客户 ...

  6. winform异步进度条LongTime

    winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...

  7. NET中级课--浅谈委托,事件,异步调用,回调等概念

    直接说题. 委托         首先明确它是什么,其实就是一个类,定义一个委托即定义一个类,那么它是什么类?用来说明方法的类型的类.字段有类型,那么方法其实也有类型,就是委托.       委托是某 ...

  8. C# 委托高级应用----线程——创建无阻塞的异步调用(一)

    前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...

  9. 谈.Net委托与线程——创建无阻塞的异步调用(一)

    前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...

随机推荐

  1. UICollectionView(一)基本概念

    整体预览 高等级的包含和管理(Top-level containment and management) UICollectionView UICollectionViewController UIC ...

  2. appium 使用send_keys方法时报错: driver.find_element_by_id("com.hmkx.zgjkj:id/layout_search_bar_input").send_keys("123")

    新手 使用send_keys方法时一直报错,上网查这个方法的用法,看着大家都是这么写的啊,后来直接搜索 报错信息,搜索结果的针对性就清楚多了. 原来是seleium版本太高导致的问题. 可以先在cmd ...

  3. C3P0数据库连接池使用方法

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  4. 1.Linux入门介绍

    1.1 Linux概述 1.1.1 Linux简要介绍 Linux的由来: Linux的内核最初是由芬兰人李纳斯·托瓦茨在上大学的时候编写的一个内核,它是基于Unix操作系统编写的 大多服务器使用的是 ...

  5. 洛谷——P2574 XOR的艺术

    P2574 XOR的艺术 很久之前就想挑战一下这道题了,线段树下传标记的入门题,跟区间加法下传标记类似. #include<bits/stdc++.h> #define N 1000005 ...

  6. Python2 下Ubuntu linux Mac 安装 PyV8

    在pip install PyV8(注意区分大小写)时,出现了如下报错 command 'x86_64-linux-gnu-gcc' failed with exit status 1 解决方案: 百 ...

  7. Java基础学习总结(36)——Java注释模板

    代码注释是对代码设计者.代码阅读者以及系统间调用提供了有效的帮助,最大限度的提高团队开发合作效率增强系统的可维护性.我们追求简化,不是为了写注释而写注释. (快速使用请直接看六.七.八) 一.原则: ...

  8. Ch’s gift

    Ch’s gift Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Proble ...

  9. Java排序算法之冒泡、选择、插入、快速

    JavaSort Java经典排序算法代码 2018-1-26更新:冒泡排序,选择排序,插入排序,快速排序 1. 冒泡排序 特点:效率低,实现简单 思想(从小到大排): 第1个数和第2个数比较,如果第 ...

  10. js 实现栈的结构

    js实现一个栈的数据结构 首先了解一下什么是栈,栈是一个后进先出的一种数据结构,执行起来效率比较高. 对于栈主要包括一些方法,弹出栈pop(),弹出栈顶元素,并删除该元素:压入栈push(),向栈中压 ...