我正在构建安装程序项目,该项目需要从 Internet 下载许多安装文件(并行执行下载操作),然后开始一一安装文件。安装顺序并不重要。当一个文件完成下载后,它被插入到队列中,我有其他工作人员从这个队列文件中取出并一一安装。我实现了几乎所有东西,但在安装过程中遇到了问题。
我正在使用以下方法以静默模式安装下载的文件:
private void Install()
{
var item = _installItems.Dequeue();
item.ProgStage = ProgressStage.Install;
RefreshPgBars();
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
//insert psi arguments and file name here
System.Diagnostics.Process.Start(psi);//start installing
}
我使用后台线程调用此方法:
Thread worker = new Thread(() => Install());
worker.IsBackground = true;
worker.Start();
worker.Join();
好像Join方法不知道什么时候安装完成——代码上worker.Join();
线一点都没有延迟。
我试图在方法末尾插入下一个代码Install()
以解决它:
while (installerProcess.HasExited == false)
{
System.Threading.Thread.Sleep(500);
}
它解决了它,但Thread.Sleep()
冻结了我的整个应用程序并提供了糟糕的用户体验。我还找到了一个解决方案,其中包括任务和“忙等待”循环,但我正在寻找更好的解决方案(更有效的解决方案)。
顺便说一句,我正在使用 .NET 4。
有任何想法吗?谢谢