I have a simple form with two buttons (Start and Stop) and a DataGridView (named Grid). I am trying to populate the DataGridView with the results of a WMI query that enumerates Win32_Process instances and puts all process names in the only column of the DataGridView. The code looks like this:
using System;
using System.Management;
using System.Windows.Forms;
namespace WindowsFormsApplication10
{
public partial class Form1 : Form
{
ManagementObjectSearcher Searcher =
new ManagementObjectSearcher();
SelectQuery Query = new SelectQuery();
ManagementOperationObserver Observer =
new ManagementOperationObserver();
public Form1()
{
InitializeComponent();
Observer.Completed +=
new CompletedEventHandler(Observer_Completed);
Observer.ObjectReady +=
new ObjectReadyEventHandler(Observer_ObjectReady);
Grid.ColumnCount = 1;
Grid.Columns[0].Name = "Name";
}
private void Start_Click(object sender, EventArgs e)
{
Query.QueryString = "Select * From Win32_Process";
Searcher.Query = Query;
Searcher.Get(Observer);
}
private void Observer_Completed
(object sender, CompletedEventArgs e)
{
Grid.Refresh();
}
private void Observer_ObjectReady
(object sender, ObjectReadyEventArgs e)
{
string [] row = new string []
{e.NewObject["Name"].ToString()};
Grid.Rows.Add(row);
Grid.Refresh();
}
private void stop_Click(object sender, EventArgs e)
{
Observer.Cancel();
}
}
}
When I run the code using the 'Start Debugging' option it runs fine and populates the DataGridView. One strange thing (at least to me) I noticed is that in the Observer_ObjectReady the Grid.Refresh() line is never reached. When I run the code with 'Start Without Debugging' the DataGridView is populated but the form freezes immediately after that. How can I deal with this? (Sorry if this is not enough information - I am willing to provide more if necessary, but, as you might have noticed, I don't have much experience with C# or Visual Studio).
I have been able to use the same asynchronous code and send the data to a RichTextBox, but I would also like to be able to populate a DataGridView. I suppose this has to do with a DataGridView, but I am puzzled because I don't get any exceptions, the application just freezes, while the same application works fine when I replace the DataGridView with a RichTextBox and add lines of text from Observer_ObjectReady.
(I have posted the same question on StackOverflow, but without a resolution)