【问题标题】:How refresh ManagementObject result c#c#如何刷新ManagementObject结果
【发布时间】:2015-07-23 14:50:39
【问题描述】:

我需要通过超时读取一些关于 MS Queue 的信息(BytesinQueue、MessagesinQueue),但是这些数据不会刷新。

var path = string.Format(@"\\{0}\root\cimv2", machine);
var scope = new ManagementScope(path);
scope.Connect();

string queryString = String.Format(@"SELECT * FROM Win32_PerfRawData_MSMQ_MSMQQueue WHERE Name like '%{0}%'", queuePath.Remove(0, queuePath.LastIndexOf('\\') + 1));
var query = new ObjectQuery(queryString);

var searcher = new ManagementObjectSearcher(scope, query);

var moItems = from ManagementObject x in searcher.Get() select x;
var moItem = moItems.FirstOrDefault();

if (moItem != null)
{
    BytesinQueue = (UInt64)moItem.GetPropertyValue("BytesinQueue");
    MessagesInQueue = (UInt64)moItem.GetPropertyValue("MessagesinQueue");
}

如果我使用 Windows Management Instrumentation Tester,数据不会刷新,但有一个“刷新对象”按钮,可以满足我的需要。

我怎样才能始终获取实际数据或刷新它?

【问题讨论】:

  • 您是否编写了 WMI Tester 程序?我猜当您单击 Refresh Object 按钮时,会调用您显示的代码。当您单步执行该代码时,您是否一直到底部?某处可能有异常。
  • 不,它内置在 Windows 中。开始->运行->“wbemtest”

标签: c# wmi msmq wmi-query


【解决方案1】:

您将无法获得实际数据,因为您必须对其进行查询。

如果您想以设定的时间间隔查询队列,那么您需要一个计时器。

将 Timer 控件拖放到表单上。

选择计时器控件并转到属性。

将其配置为每 5000 毫秒刷新一次(即 5 秒,或者使用任何你想要的)。

在 GUI 中双击 Timer Tick 事件。这应该会将您带到代码窗口。

将您的代码粘贴到此例程中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2010-09-05
    • 2019-04-11
    • 2015-01-20
    相关资源
    最近更新 更多