显示组合框上的所有进程

问题描述

我想制作一个ComboBox显示所有正在运行的进程。

此处是屏幕截图的样子。只是空着。

Screenshot of my application and combo box.

XAML:

ComboBox Name="comboBox" RenderTransformOrigin="0.502,-0.751" Margin="129,112,111,217" SelectionChanged="comboBox_SelectionChanged"/>

C#:

{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void  comboBox_SelectionChanged(object sender,SelectionChangedEventArgs e)
    {
        comboBox.Items.Clear();
        Process[] MyProcess = Process.GetProcesses();
        for (int i = 1; i < MyProcess.Length; i++)
            comboBox.Items.Add(string.Format("{0} - {1}",MyProcess[i].ProcessName,MyProcess[i].Id));
    }
}

解决方法

SelectionChanged事件不起作用,因为它仅在选择更改时才触发。您可以改用DropDownOpened事件。

ComboBox Name="comboBox" RenderTransformOrigin="0.502,-0.751" Margin="129,112,111,217" DropDownOpened="ComboBox_OnDropDownOpened"/>

您的事件处理程序将如下所示:

private void ComboBox_OnDropDownOpened(object? sender,EventArgs e)
{
   comboBox.Items.Clear();
   var processes = Process.GetProcesses();
   for (var i = 1; i < processes.Length; i++)
      comboBox.Items.Add($"{processes[i].ProcessName} - {processes[i].Id}");
}

另一种方法是公开在构造函数中初始化并绑定到XAML中ItemsSource的{​​{1}}的进程集合。然后您可以根据需要更新集合,例如通过计时器或用户触发的命令定期更新。

您可以采用以下选项之一来实施集合: