我是否会遇到从多线程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();
}
}
答案 0 :(得分:0)
如果toProcess
包含值1,000,000,该怎么办?那么你就会产生1米的线程。 _Proc.Start()
没有阻止,所以你的线程将在没有时间完成,但你可能不想产生1m进程。
如果要并行处理它们,请在线程中添加process.WaitForExit();
(以使执行进程阻塞)并将它们放在ThreadPool
上。 (ThreadPool
限制并发线程(因此也是进程))
或
将Parallel.Foreach()
与MaxDegreeOfParallelism
属性一起使用。