这是在C#中。
有一个日志文件(log.txt),它在处理过程中不断更新。当进程完成时,最后一行写入日志文件的末尾是“Process finished!”。没有例外。
我想不断读取文件,也许是每秒四次,以查看字符串是否已显示,以便我知道该过程何时完成。
我想知道,做到这一点的最佳方式(简单,轻便,可靠)是什么?计时器? FileWatcherSyetem?还有别的吗?
非常感谢!
答案 0 :(得分:0)
在程序集中,我使用计时器定期检查.txt文件状态,如下所示:
System.Timers.Timer _logFileCheckTimer;
public FijiLauncherControl()
{ // timer set up
_logFileCheckTimer = new System.Timers.Timer(250);
_logFileCheckTimer.Enabled = true;
_logFileCheckTimer.Elapsed += new System.Timers.ElapsedEventHandler(_logFileCheckTimer_Elapsed);
_logFileCheckTimer.Start(); // start the timer
}
void _logFileCheckTimer_Elapsed(object sender, EventArgs e)
{
if (_processOn && IsLogOn)
{
try
{
_processFinished = CheckStatuts(); // checking file status
if (_processFinished) // fire event if checking status returns true
{
OnIjmFinished(EventArgs.Empty);
_processOn = false;
_logFileCheckTimer.Stop();
}
}
catch (Exception ex)
{
}
}
}
在aseembly中。如果_processFinished = CheckStatuts();
返回true
:
// event delegate public delegate void IjmFinishedEventHandler(object sender,EventArgs e); 公共事件IjmFinishedEventHandler IjmFinished; //事件处理程序
protected virtual void OnIjmFinished(EventArgs e)
{
if (IjmFinished != null) // trigger event
IjmFinished(this, e);
}
在主应用程序中,应该有事件接收器,如下所示:
private FijiLauncherControl _fl; // the object of your assembly
_fl.IjmFinished += new IjmFinishedEventHandler(_fl_IjmFinished); // event from the assembly should trigger an event handler
void _fl_IjmFinished(object sender, EventArgs e) // event handler
{
_vm.IjmFinished = true; // a boolean var in viewmodel in main app set to be true once the event from the assembly is triggered
//throw new NotImplementedException();
}
那应该做的。