【发布时间】:2015-07-20 22:03:15
【问题描述】:
我有一个 BackgroundWorker 来监视 WMI 通知事件的触发。我的查询类似于SELECT * FROM __InstanceDeletionEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name=proccessnamehere。此查询每 2 秒轮询一次满足 WHERE 条件的 __InstanceDeletionEvent。有时我正在观看的过程需要一段时间,延迟事件触发,我想取消它。我读到的关于取消 BackgroundWorker 的所有内容都建议我使用某种循环。但是,我不确定如何在通知事件中包含循环。有没有其他方法可以做到这一点?我玩了一个计时器,但没有成功
编辑:代码示例 - 删除不相关的代码
(这将针对远程计算机执行)
using System.Management;
private void backGroundWorkerStart_DoWork(object sender, DoWorkEventArgs e)
{
object[] args = e.Argument as object[];
string computerName = args[0].ToString();
string processName = args[1].ToString();
ConnectionOptions con = new ConnectionOptions();
con.Impersonation = ImpersonationLevel.Impersonate;
con.Authentication = AuthenticationLevel.Default;
con.EnablePrivileges = true;
ManagementScope scope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", computerName), con);
scope.Connect();
WqlEventQuery query = new WqlEventQuery(String.Format("SELECT * FROM __InstanceDeletionEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='{0}'", processName));
ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query);
ManagementBaseObject baseObject = watcher.WaitForNextEvent();
}
【问题讨论】:
-
你能发布你当前代码的(可能是简化的)版本吗?
-
@EricJ。添加了一个简化的示例。希望这是您的要求。
标签: c# .net multithreading wmi backgroundworker