多线程WinForm调用PowerShell脚本.Net 3.5

时间:2016-05-12 14:05:11

标签: c# .net multithreading powershell powershell-v2.0

我是否会遇到从多线程WinForm应用程序执行单个PowerShell脚本的任何问题?我主要担心的是WinForm线程锁定PowerShell脚本。

for (int i = 0; i <= toProcess; i++)
{
    bWorker.ReportProgress(0, i.ToString());
    PowerShellProcs workPs = new PowerShellProcs();

    workPs.CusId = CustomerDataTable.Rows[i]["CustomerID"].ToString();

    ThreadStart threadDelegate = new ThreadStart(workPs.DoPs);
    Thread newThread = new Thread(threadDelegate);
    newThread.Name = CustomerDataTable.Rows[i]["CustomerID"].ToString();
    newThread.Start();

    if (toProcess == i)
    {
        resetEvent.Set();
    }
    Thread.Sleep(1000);

    //threads.Add(newThread);
}

class PowerShellProcs
{
    public string CusId;
    public void DoPs()
    {
        String customerId = CusId;
        var scriptfile = @"c:\ProcessCustomer.ps1";         
        Process _Proc = new Process();
        _Proc.StartInfo = "Powershell.exe";
        _Proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        _Proc.StartInfo.Arguments = "'" + customerId + "' ";
        _Proc.Start();
    }
}

1 个答案:

答案 0 :(得分:0)

如果toProcess包含值1,000,000,该怎么办?那么你就会产生1米的线程。 _Proc.Start()没有阻止,所以你的线程将在没有时间完成,但你可能不想产生1m进程。

如果要并行处理它们,请在线程中添加process.WaitForExit();(以使执行进程阻塞)并将它们放在ThreadPool上。 (ThreadPool限制并发线程(因此也是进程))

Parallel.Foreach()MaxDegreeOfParallelism属性一起使用。