C#如何使用复选框列表将新进程添加到进程列表

时间:2018-08-27 11:31:01

标签: c# windows winforms process checkedlistbox

我正在为清理实用程序编写一个Windows窗体应用程序,其中Windows窗体应用程序将执行具有相同进程属性的多个批处理文件,以清理计算机的各个部分,这是我到目前为止所要做的,

ProcessStartInfo[] infos = new ProcessStartInfo[]
{
    new ProcessStartInfo(Environment.CurrentDirectory + @"example batch file 1"),
    new ProcessStartInfo(Environment.CurrentDirectory + @"example batch file 2"),
};

然后我用它们执行

Process[] startedProcesses = StartProcesses(infos, true);

每个进程的属性都包含在其中,

public Process[] StartProcesses(ProcessStartInfo[] infos, bool waitForExit)
    {
        ArrayList processesBuffer = new ArrayList();
        foreach (ProcessStartInfo info in infos)
        {
            Process process = Process.Start(info);

            if (waitForExit)
            {
                process.StartInfo.UseShellExecute = true;
                process.StartInfo.Verb = "runas";
                process.WaitForExit();
            }
        }
    }

问题是,我想使用if语句将新的批处理文件添加到列表中,因为我希望用户控制使用清单列表框执行的批处理文件,例如,

ProcessStartInfo[] infos = new ProcessStartInfo[]
{
    if (checkedListBox1.GetItemCheckState(0) == CheckState.Checked)
        {
            new ProcessStartInfo(Environment.CurrentDirectory + @"example batch file 1"),
        }
    if (checkedListBox1.GetItemCheckState(1) == CheckState.Checked)
        {
            new ProcessStartInfo(Environment.CurrentDirectory + @"example batch file 2"),
        }
};

但是这行不通...这个周围还有吗?

亲切的问候,雅各布

1 个答案:

答案 0 :(得分:1)

在最后一个代码片段中,您遇到语法错误,因为这不是填充数组的正确方法。我对其进行了修改,因此这是一个简单的示例,并使用了List。它根据选中的项目启动应用程序。并且您应该确切显示出您遇到了什么错误。

private void button1_Click(object sender, EventArgs e)
    {
        List<ProcessStartInfo> startInfos = new List<ProcessStartInfo>();

        if (checkedListBox1.GetItemChecked(0))
        {
            startInfos.Add(new ProcessStartInfo("notepad.exe"));
        }
        if (checkedListBox1.GetItemChecked(1))
        {
            startInfos.Add(new ProcessStartInfo("calc.exe"));
        }
        if (checkedListBox1.GetItemChecked(2))
        {
            startInfos.Add(new ProcessStartInfo("explorer.exe"));
        }

        foreach (var startInfo in startInfos)
        {
            Process.Start(startInfo);
        }
    }