c# - 我应该使用 Thread.Sleep() 检查进程是否仍在运行吗?
问题描述
正如标题所说,我目前正在制作一个 WPF 应用程序,我需要检测一个应用程序是否正在运行并在它关闭时执行某些操作。我想到的方法是运行一个单独的线程并每两秒检查一次进程是否仍在运行,如下所示:
while(Process.GetProcessesByName(processName).Length != 0) {
Thread.Sleep(2000);
}
//Do something
这会是一个很好的解决方案,还有其他方法吗?
谢谢
解决方案
这会是一个很好的解决方案吗?
不,因为它几乎没有浪费整个线程。
更好地使用计时器,在 WPF 应用程序中最好使用 DispatcherTimer:
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) };
timer.Tick += (s, e) =>
{
if (Process.GetProcessesByName(processName).Length > 0)
{
// ...
}
};
timer.Start();
如果要在 UI 线程上执行冗长的操作,您可以使用Tick
等待 a 的异步事件处理程序Task
(它将在后台的线程池线程上运行):
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) };
timer.Tick += async (s, e) =>
{
if (Process.GetProcessesByName(processName).Length > 0)
{
await Task.Run(() =>
{
// lengthy operation here which runs on a thread pool thread
});
// udate UI here
}
};
timer.Start();
推荐阅读
- python - 将复选框数据和文本输入数据保存到 .Json 文件
- reactjs - Redux 单态更新
- python - 在 Django 中按第一个外键排序
- html - 悬停内部元素时如何隐藏容器div标题?
- wordpress - 如何限制用户在 24 小时内仅登录一次?在 WordPress 中
- lldb - lldb 是否可以在断点检查已写入文件的内容或它生成/使用的 IPC 机制中的数据?
- sharepoint - 如何使用powershell脚本从sharepoint中的自定义列表中删除10000个项目
- python - 什么是更改大文件的有效方法
- java - Java 程序 - 使用 For 循环的插入排序
- c# - C# 表达式:数据表的 SQL/LINQ 动态排序