我有一个System.Threading.Timer,每10毫秒调用一次适当的事件处理程序(回调).该方法本身不是可重入的,有时可能会超过10毫秒.因此,我想在方法执行期间停止计时器.
码:
private Timer _creatorTimer;
// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
_creatorTimer = new Timer(CreatorLoop, null, 0, 10);
// some other code that worker is doing while the timer is active
// ...
// ...
}
private void CreatorLoop(object state) {
// Stop timer (prevent reentering)
_creatorTimer.Change(Timeout.Infinite, 0);
/*
... Work here
*/
// Reenable timer
_creatorTimer.Change(10, 0);
}
Run Code Online (Sandbox Code Playgroud)
MSDN声明在线程池的单独线程中调用回调方法(每次定时器触发).这意味着如果我停止计时器方法中的第一件事它仍然不会阻止计时器触发并在第一个有机会停止计时器之前运行该方法的另一个实例.
也许应该锁定计时器(甚至是非重入方法本身)?在执行其回调(和非重入)方法期间阻止计时器触发的正确方法是什么?
我有一个程序可以将其日志连续写入文本文件。我没有它的源代码,所以我不能以任何方式修改它,它也受到 Themida 的保护。
我需要读取日志文件并根据文件的内容执行一些脚本。我无法删除该文件,因为不断写入文件的程序已锁定该文件。那么读取文件并只读取文件的新行的更好方法是什么?保存最后一行位置?或者有什么对在 C# 中解决它有用的东西?