/*工作中需要对某个目录下的文件进行轮询异步读取,并对当前程序进行最大化最小化展现处理*/
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);
}