我创建了一个windows服务,其中的代码将每1秒执行一次。
我的代码
if (Process.GetProcessesByName("my_process").Length > 0)
{
writelog("Started uploading files");
upload_file();
writelog("Finished uploading files");
}我正在使用GetProcessByName检查进程是否已经在运行。它不工作,因为每隔1秒,日志文件就会获得一个条目Started uploading files
所以我的日志文件将是
Started uploading files
Started uploading files
Started uploading files
Finished uploading files
Finished uploading files
Finished uploading files我需要的是
Started uploading files
Finished uploading files
Started uploading files
Finished uploading files
Started uploading files
Finished uploading files即。在没有完成第一个周期的情况下,服务不应该进入进程。有没有办法做到这一点?
发布于 2016-11-07 15:36:13
您可以使用Sytem.Threading.Mutex将其作为单实例应用程序强制执行。查看this question。
发布于 2016-11-07 15:44:48
您可以使用Mutex来实现这一点。为了避免这个问题,你可以这样使用它:
private static object _sync = new object();
.....
if (Process.GetProcessesByName("my_process").Length > 0)
{
lock(_sync)//mutex here, so, only one thread will be able to launch this code.
{
if (Process.GetProcessesByName("my_process").Length > 0)
{
writelog("Started uploading files");
upload_file();
writelog("Finished uploading files");
}
}
}仔细检查这里是为了提高性能。如果你愿意,你可以删除outter check。
https://stackoverflow.com/questions/40459885
复制相似问题