如何刷新ManagementObject结果c#

时间:2015-07-23 14:50:39

标签: c# wmi msmq wmi-query

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

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,数据不会刷新,但有一个“刷新对象”按钮,它可以满足我的需要。

如何始终获取实际数据或刷新它?

refresh object

1 个答案:

答案 0 :(得分:0)

您将无法获取实际数据,因为您必须查询它。

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

将Timer控件拖放到表单上。

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

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

双击GUI中的Timer Tick事件。这应该会带你进入代码窗口。

将代码粘贴到此例程中。