我有一个winform
托管WCF
服务的应用程序。
此应用程序支持多个客户端,每个客户端都会string
向我的应用程序发送一个代表文件名的文件。我的申请开始处理并完成工作。进程结束后(每个进程在有限的时间内打开)我的进程引发了一个退出事件。
创建过程的文件将文件复制到新位置,然后删除旧文件。此时,大多数情况下都失败了,因为我的文件仍在使用中。所以我想知道如何处理这个问题。
这就是我打开我的流程的方式:
ProcessStartInfo tsharkStartInfo = new ProcessStartInfo();
Process pros = new Process();
tsharkStartInfo.FileName = processToInvoke;
tsharkStartInfo.RedirectStandardOutput = true;
tsharkStartInfo.RedirectStandardError = true;
tsharkStartInfo.RedirectStandardInput = true;
tsharkStartInfo.UseShellExecute = false;
tsharkStartInfo.CreateNoWindow = true;
tsharkStartInfo.Arguments = args;
pros.StartInfo = tsharkStartInfo;
pros.ErrorDataReceived += pros_ErrorDataReceived;
pros.OutputDataReceived += pros_OutputDataReceived;
pros.EnableRaisingEvents = true;
pros.Start();
pros.BeginOutputReadLine();
pros.BeginErrorReadLine();
pros.EnableRaisingEvents = true;
pros.Exited += (object sender, EventArgs e) =>
{
if (ProcessExitedEvent != null)
ProcessExitedEvent(pros.Id); // Raised this event when my process exit
};
private void processExitEvent()
{
// copy the file to new location
// delete the old file
}
所以我应该做这样的事情:
ManualResetEvent mre = new ManualResetEvent(false);
private void processExitEvent()
{
// copy the file to new location
mre.WaitOne(2000); // wait 2 seconds to ensure my file not longer in use
// delete the old file
}
所以我的问题是,这个解决方案会阻止当前线程还是我的所有客户端线程?