您的位置:首页 > 编程语言 > C#

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);

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: