写了一个调用winrar将文件夹打压缩包的代码:
/// <summary>
/// 打包成RAR
/// </summary>
/// <param name="strSource">路径</param>
/// <param name="rarName">压缩包名</param>
/// <param name="strPass">pass</param>
/// <returns>1正常2不正常-1失败</returns>
public int CompressRAR(string strSource, string rarName, string strPass)
{
int iReturn = -1;
if (Exists())
{
//int iPid = CustomFun.InstanceOper.SearchProcessID("winrar", true); Process processWinRar = new System.Diagnostics.Process();
processWinRar.StartInfo.FileName = "Winrar.exe";
processWinRar.StartInfo.CreateNoWindow = true;
processWinRar.StartInfo.Arguments = string.Format(" a -p{0} {1} -r -ibck -EP1 {2}", strPass, rarName, strSource); processWinRar.Start();
while (processWinRar.HasExited)//问题在这里
{
int iExitCode = processWinRar.ExitCode;
if (iExitCode == 0)
{
iReturn = 1;
}
else
{
iReturn = 2;
}
}
}
else
{
iReturn = -1;
}
return iReturn;
}问题:进程执行后,压缩文件夹需要一定的时间,于是while (processWinRar.HasExited)这里获取的值就是false,该方法返回的值也就是-1。
求教:如何等待该进程的返回值为真时再向下执行呢?目前能想到的就是thread.sleep(xxx),但是不方便。谢谢了
/// <summary>
/// 打包成RAR
/// </summary>
/// <param name="strSource">路径</param>
/// <param name="rarName">压缩包名</param>
/// <param name="strPass">pass</param>
/// <returns>1正常2不正常-1失败</returns>
public int CompressRAR(string strSource, string rarName, string strPass)
{
int iReturn = -1;
if (Exists())
{
//int iPid = CustomFun.InstanceOper.SearchProcessID("winrar", true); Process processWinRar = new System.Diagnostics.Process();
processWinRar.StartInfo.FileName = "Winrar.exe";
processWinRar.StartInfo.CreateNoWindow = true;
processWinRar.StartInfo.Arguments = string.Format(" a -p{0} {1} -r -ibck -EP1 {2}", strPass, rarName, strSource); processWinRar.Start();
while (processWinRar.HasExited)//问题在这里
{
int iExitCode = processWinRar.ExitCode;
if (iExitCode == 0)
{
iReturn = 1;
}
else
{
iReturn = 2;
}
}
}
else
{
iReturn = -1;
}
return iReturn;
}问题:进程执行后,压缩文件夹需要一定的时间,于是while (processWinRar.HasExited)这里获取的值就是false,该方法返回的值也就是-1。
求教:如何等待该进程的返回值为真时再向下执行呢?目前能想到的就是thread.sleep(xxx),但是不方便。谢谢了
等待进程退出。
已经用
while (!processWinRar.HasExited)
{thread.sleep(10000); } 解决