我需要通过超时(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,数据不会刷新,但有一个“刷新对象”按钮,它可以满足我的需要。
答案 0 :(得分:0)
您将无法获取实际数据,因为您必须查询它。
如果要以设定的间隔查询队列,则需要一个计时器。
将Timer控件拖放到表单上。
选择定时器控件并转到属性。
将其配置为每5000毫秒刷新一次(即5秒,或使用您想要的任何内容)。
双击GUI中的Timer Tick事件。这应该会带你进入代码窗口。
将代码粘贴到此例程中。