C# 进程在处置时挂起

问题描述 投票:0回答:1

我正在从 C# 调用命令行进程,该进程从某个远程服务器进行更新。当它可以找到远程服务器并从中获取数据时,工作正常。如果未连接到网络也可以正常工作。

但是,当远程服务器无法访问时,外部进程将无限期地尝试获取数据,并且没有命令行选项来指定超时。所以我在尝试了 15 秒后对进程添加了强制终止。

using (var process = new Process {...})
{
    process.Start();
    if (!process.WaitForExit(15 * 1000))
    {
        process.Kill();
    }
}

我可以看到当调用

process.Kill()
时进程被终止,但是当退出
using
范围时(即处置进程时),它会挂起。

这有什么问题吗?我是否遗漏了一些东西来确保这个进程被正确杀死?

谢谢!

编辑:

进程开始信息是

FileName = command,
Arguments = arguments,
WorkingDirectory = workDir,
CreateNoWindow = true,
UseShellExecute = false
c# process
1个回答
0
投票

这已经很老了,但我也遇到了同样的问题,尽管情况不同。由于我只能在这里找到关于我的问题的这个问题,所以我决定在这里发布我如何修复它。

就我而言,我在 C# 表单应用程序中运行它,无窗口且异步,没有与网络相关的内容发生。

在退出事件时,我调用了一个进行一些清理的方法,包括进程的 dispose 方法。因为该进程在另一个线程上运行,并且我还在进程退出事件上进行 UI 更新,所以我将代码放入

control.Invoke();
方法中,该方法在与控件相同的线程上运行该代码,否则我会收到错误.

显然,在另一个线程上处置进程导致了问题,一旦我将处置移到同一线程上,进程就会停止挂起。

© www.soinside.com 2019 - 2024. All rights reserved.