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
}
}
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...
- Winform 异步调用
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 用Html5/CSS3做Winform,一步一步教你搭建CefSharp开发环境(附JavaScript异步调用C#例子,及全部源代码)上
本文为鸡毛巾原创,原文地址:http://www.cnblogs.com/jimaojin/p/7077131.html,转载请注明 CefSharp说白了就是Chromium浏览器的嵌入式核心,我们 ...
- WinForm查询大数据界面假死,使用异步调用解决
用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后 ...
- .Net组件程序设计之异步调用
.Net组件程序设计之异步调用 说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和BeginInvoke(), 要想让自己的组件可以被客户 ...
- winform异步进度条LongTime
winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...
- NET中级课--浅谈委托,事件,异步调用,回调等概念
直接说题. 委托 首先明确它是什么,其实就是一个类,定义一个委托即定义一个类,那么它是什么类?用来说明方法的类型的类.字段有类型,那么方法其实也有类型,就是委托. 委托是某 ...
- C# 委托高级应用----线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
- 谈.Net委托与线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
随机推荐
- day10-函数基础知识
函数 什么是函数 把工具事先准备好,然后下次使用的时候,直接使用就行了.我们的函数就是工具 为何用函数 1.遇到重复的功能只能重复编写实现代码,代码冗余 2.功能需要扩展时,需要找出所有实现该功能的地 ...
- Java中接口与接口和类之间的关系
接口和接口之间的关系 继承关系 可以多继承,并且可以多层继承 注意: 1.如果多个父接口中有同名的抽象方法,那么子接口只需要实现一次即可 2.如果多个父接口中有同名的默认方法,那么子接口必须重写默认方 ...
- .net core发布程序
这里说的是,和.net core运行库一起发布,所以,目标运行系统,可以不安装.net core也能运行 1.project.json 把dependencies里面的type删除掉,后面加入&quo ...
- IO文件读取
/** *按字节读取文件 */@Testpublic void readerByte() { File file = new File("D:\\BindCheckControllerTes ...
- 【Linq】
" }; var l1 = strs.ToLookup(a => "a"); //Key=a elements=1,3 var l2 = strs.ToLookup ...
- uva 1587(Box UVA - 1587)
题目大意是给定6个数对,每个数对代表一个面的长和宽,判断这6个面是否能构成一个长方体. 这种题一看很复杂,但是只要不想多了实际上这就是一个水题... 首先说明一下判断的思路: 1.长方体是有三个对面的 ...
- NLTK学习笔记(六):利用机器学习进行文本分类
目录 一.监督式分类:建立在训练语料基础上的分类 特征提取器和朴素贝叶斯分类器 过拟合:当特征过多 错误分析 二.实例:文本分类和词性标注 文本分类 词性标注:"决策树"分类器 三 ...
- 洛谷 1486 郁闷的出纳员【Treap】
[题意概述] 要求维护一个序列支持以下操作: 1,插入元素x: 2,把序列的所有元素加上x: 3,把序列的所有元素减去x,同时低于一个给定的下限的元素马上被删除: 4,询问序列中第k大的元素. [题解 ...
- vue 组件通信传值
父子组件通信: 子组件 <template> <div> <h3 @click="alerrt"> 我是子组件一</h3> < ...
- [Usaco2010 Mar]gather 奶牛大集会
[Usaco2010 Mar]gather 奶牛大集会 题目 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 ...