private void OpenFile()
{//省略打开文件代码
ThreadPool.QueueUserWorkItem(new WaitCallback(ReloadFile));
}
string testFileTime;
private void ReloadFile(Object stateInfo)
{
//检查文件是否变更,先把原始更改时间记录下来
FileInfo aFile = new FileInfo(filename);
testFileTime = aFile.LastWriteTime.ToString();
//启动定时器
timerCheckChanged.Enabled = true;
}
private void timerCheckChanged_Tick(object sender, EventArgs e)
{
FileInfo aFile = new FileInfo(filename);
//和全局更改时间变量进行校对,以判断文件是否发生了更改
if (aFile.LastWriteTime.ToString() != testFileTime)
{
listViewExG.Clear();
PaintListViewG();
//Q:timerCheckChanged.Enabled = false;
}
}因为OpenFile完了之后主程序还有别的任务要处理(图形显示)
所以调用线程池里的线程,去启动定时器,并且想让该线程接管定时器来判断文件变更与否
结果是,定时器被 timerCheckChanged.Enabled = true;语句启动后,就没能进入timerCheckChanged_Tick事件处理方法,很是奇怪……
但如果我不调用线程池,直接主程序启动定时器,倒是可以完成任务多线程的不能调用定时器么?
另外,我想判断我文件是否被更改,如果我把//Q:timerCheckChanged.Enabled = false;这行加进去,那我更改了文件,能检测到,文件不关闭的情况下第二次更改文件,就没法检测到了,因为定时器已经关闭了所以想问,要如何才能检测文件是否关闭,检测文件关闭的时候再关闭定时器呢?谢谢大家,快没分了,只能给20了,大家体谅下小弟初学者吧~~
解决方案 »
- winform app.config
- 请问ConfigurationManager的用法
- window.showModalDialog回传参数问题
- 一个类似Grid(FpSpread)的控件实现增删查改的问题.
- C#怎样把一个Bitmap以梯形的形状绘制在窗体上
- 新手:学C#达到什么条件可以做程序员开发程序?
- 请教:在创建从 C#.NET 到 SQL Server 的受信任数据连接时出现“Login Failed”(登录失败)错误信息
- 在WinForm,自定义类中添加 System.Timers.Timer控件,为什么不能正常进行
- 求助一个正则表达式:
- int类型转换出错,奇怪
- 程序输出的文本怎么用语音读取出来
- 如何防止两个*进程*同时写一个文件
而System.Windows.Form.Timer是需要通过消息泵来执行的。非UI线程倒是可以用System.Threading.Timer,不过不能直接在里面更新UI。