C# 异步读取文件配置秒数控制界面最大最小化DEMO
2015-08-22 21:07
387 查看
/*工作中需要对某个目录下的文件进行轮询异步读取,并对当前程序进行最大化最小化展现处理*/
namespace CsharpStudy
{
//控制界面最大化最小化DEMO
public partial class Form1 : Form
{
/// <summary>
/// 当前自动最小化倒计时时间
/// </summary>
private int currentMinimizedTime = 0;
//文件中参数传递时间
private int minimizedTime = 0;
public Form1()
{
InitializeComponent();
AsyncTime.Tick -= new EventHandler(AsyncTime_Tick);
AsyncTime.Tick += new EventHandler(AsyncTime_Tick);
FirstPageDelayTime.Tick -= new EventHandler(FirstPageDelayTime_Tick);
FirstPageDelayTime.Tick += new EventHandler(FirstPageDelayTime_Tick);
AsyncTime.Start();
FirstPageDelayTime.Stop();
button2.Enabled = false;
//初始最小化界面
this.WindowState = FormWindowState.Minimized;
}
/// <summary>
/// 时钟事件,进行最小化倒计时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FirstPageDelayTime_Tick(object sender, EventArgs e)
{
try
{
if (this.currentMinimizedTime <= 1)
{
this.FirstPageDelayTime.Stop();
//最小化
this.WindowState = FormWindowState.Minimized;
currentMinimizedTime = 0;
AsyncTime.Start();
}
else
{
this.currentMinimizedTime--;
this.label1.Text = "计时:" + this.currentMinimizedTime.ToString() + "秒)";
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 时钟事件用于异步读取文件,读取到最大化界面时间,并进入倒计时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AsyncTime_Tick(object sender, EventArgs e)
{
AsyncTime.Stop();
AsyncFileReader afr = new AsyncFileReader();
AsyncDelegate adl = new AsyncDelegate(afr.ReadFileLastLine);
//文件路径可扩展成配置
System.IAsyncResult ar = adl.BeginInvoke(1000, "D://aa.txt", null, null);
while (ar.IsCompleted == false)
{
System.Threading.Thread.Sleep(100);
}
string ret = adl.EndInvoke(ar);
//currentMinimizedTime == 0当当前界面未完成最小化时,即使有新文件读取,均不进行处理;
//当未读取到延时时间时也不处理
if (!string.IsNullOrEmpty(ret) && currentMinimizedTime == 0)
{
this.WindowState = FormWindowState.Maximized;
try
{
//多少秒后进入最小化
minimizedTime = int.Parse(ret);
currentMinimizedTime = minimizedTime;
//最大化计时开始
FirstPageDelayTime.Start();
}
catch (Exception ex)
{
//当读取延时秒数错误时,默认是60s,可扩展配置
minimizedTime = 60;
currentMinimizedTime = 60;
FirstPageDelayTime.Start();
}
}
else
{
//重新开启异步文件读取
AsyncTime.Start();
}
}
/// <summary>
/// 用于测试控制进入下一页面,停止最小化计时,并打开返回首页控制按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
FirstPageDelayTime.Stop();
button1.Enabled = false;
button2.Enabled = true;
}
/// <summary>
/// 返回首页按钮,返回首页重新计时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
currentMinimizedTime = minimizedTime;
FirstPageDelayTime.Start();
button1.Enabled = true;
button2.Enabled = false;
}
}
class AsyncFileReader
{
/// <summary>
/// 读取文件最后一行并删除
/// </summary>
/// <param name="SleepSec">进程休眠时间</param>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
public string ReadFileLastLine(int SleepSec, string filePath)
{
string str = string.Empty;
System.Threading.Thread.Sleep(SleepSec);
if (System.IO.File.Exists(filePath))
{
System.IO.StreamReader sr = new System.IO.StreamReader(filePath);
//读取最后一行
while (!sr.EndOfStream)
{
str = sr.ReadLine();
}
sr.Close();
System.IO.File.Delete(filePath);
}
return str;
}
}
public delegate string AsyncDelegate(int callDuration, string filePath);
}
namespace CsharpStudy
{
//控制界面最大化最小化DEMO
public partial class Form1 : Form
{
/// <summary>
/// 当前自动最小化倒计时时间
/// </summary>
private int currentMinimizedTime = 0;
//文件中参数传递时间
private int minimizedTime = 0;
public Form1()
{
InitializeComponent();
AsyncTime.Tick -= new EventHandler(AsyncTime_Tick);
AsyncTime.Tick += new EventHandler(AsyncTime_Tick);
FirstPageDelayTime.Tick -= new EventHandler(FirstPageDelayTime_Tick);
FirstPageDelayTime.Tick += new EventHandler(FirstPageDelayTime_Tick);
AsyncTime.Start();
FirstPageDelayTime.Stop();
button2.Enabled = false;
//初始最小化界面
this.WindowState = FormWindowState.Minimized;
}
/// <summary>
/// 时钟事件,进行最小化倒计时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FirstPageDelayTime_Tick(object sender, EventArgs e)
{
try
{
if (this.currentMinimizedTime <= 1)
{
this.FirstPageDelayTime.Stop();
//最小化
this.WindowState = FormWindowState.Minimized;
currentMinimizedTime = 0;
AsyncTime.Start();
}
else
{
this.currentMinimizedTime--;
this.label1.Text = "计时:" + this.currentMinimizedTime.ToString() + "秒)";
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 时钟事件用于异步读取文件,读取到最大化界面时间,并进入倒计时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AsyncTime_Tick(object sender, EventArgs e)
{
AsyncTime.Stop();
AsyncFileReader afr = new AsyncFileReader();
AsyncDelegate adl = new AsyncDelegate(afr.ReadFileLastLine);
//文件路径可扩展成配置
System.IAsyncResult ar = adl.BeginInvoke(1000, "D://aa.txt", null, null);
while (ar.IsCompleted == false)
{
System.Threading.Thread.Sleep(100);
}
string ret = adl.EndInvoke(ar);
//currentMinimizedTime == 0当当前界面未完成最小化时,即使有新文件读取,均不进行处理;
//当未读取到延时时间时也不处理
if (!string.IsNullOrEmpty(ret) && currentMinimizedTime == 0)
{
this.WindowState = FormWindowState.Maximized;
try
{
//多少秒后进入最小化
minimizedTime = int.Parse(ret);
currentMinimizedTime = minimizedTime;
//最大化计时开始
FirstPageDelayTime.Start();
}
catch (Exception ex)
{
//当读取延时秒数错误时,默认是60s,可扩展配置
minimizedTime = 60;
currentMinimizedTime = 60;
FirstPageDelayTime.Start();
}
}
else
{
//重新开启异步文件读取
AsyncTime.Start();
}
}
/// <summary>
/// 用于测试控制进入下一页面,停止最小化计时,并打开返回首页控制按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
FirstPageDelayTime.Stop();
button1.Enabled = false;
button2.Enabled = true;
}
/// <summary>
/// 返回首页按钮,返回首页重新计时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
currentMinimizedTime = minimizedTime;
FirstPageDelayTime.Start();
button1.Enabled = true;
button2.Enabled = false;
}
}
class AsyncFileReader
{
/// <summary>
/// 读取文件最后一行并删除
/// </summary>
/// <param name="SleepSec">进程休眠时间</param>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
public string ReadFileLastLine(int SleepSec, string filePath)
{
string str = string.Empty;
System.Threading.Thread.Sleep(SleepSec);
if (System.IO.File.Exists(filePath))
{
System.IO.StreamReader sr = new System.IO.StreamReader(filePath);
//读取最后一行
while (!sr.EndOfStream)
{
str = sr.ReadLine();
}
sr.Close();
System.IO.File.Delete(filePath);
}
return str;
}
}
public delegate string AsyncDelegate(int callDuration, string filePath);
}
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议117:使用SSL确保通信中的数据安全
- 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包
- C#值类型与引用类型
- c#中取整和取余
- C# 跨线程调用控件
- 编写高质量代码改善C#程序的157个建议——建议116:避免用非对称算法加密文件
- C#自定义事件监听实现方法
- C#实现清空回收站的方法
- 编写高质量代码改善C#程序的157个建议——建议115:通过HASH来验证文件是否被篡改
- c# 函数
- C#通过调用系统命令执行R脚本
- C#自定义签名章实现方法
- C#实现磁性窗体(吸附、剥离、移动)
- selenium C#下的zencart自动化测试(WFloginUrlPayment)环境4.0
- C#datatable实例
- C#操作datatable
- C# WINFORM的自动更新程序
- C#通过R.Net调用R程序
- c# 隐藏已打开的窗口,打开登陆窗口
- c#操作XML