Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何暂停后台进程?_C#_Winforms_Process - Fatal编程技术网

C# 如何暂停后台进程?

C# 如何暂停后台进程?,c#,winforms,process,C#,Winforms,Process,我有一个通过API将文件上传到服务器的应用程序,是一个c#中的WinForm应用程序,这个应用程序启动了一个进程 此进程是另一个WinForm应用程序的.exe文件。我试图通过id、名称获取进程,甚至获取所有进程,但我找不到已启动的进程 问题是我运行上传文件的过程,表单有一个取消按钮,这个按钮应该暂停过程并询问用户是否要取消操作,如果他单击是,我必须调用另一段代码,但我找不到该过程,我不能中断或暂停 有什么想法吗?你不能阻止它,你只要找到exe名称并杀死它就行了 DialogResult di

我有一个通过API将文件上传到服务器的应用程序,是一个c#中的WinForm应用程序,这个应用程序启动了一个进程

此进程是另一个WinForm应用程序的.exe文件。我试图通过id、名称获取进程,甚至获取所有进程,但我找不到已启动的进程

问题是我运行上传文件的过程,表单有一个取消按钮,这个按钮应该暂停过程并询问用户是否要取消操作,如果他单击是,我必须调用另一段代码,但我找不到该过程,我不能中断或暂停


有什么想法吗?

你不能阻止它,你只要找到exe名称并杀死它就行了

DialogResult dialogResult = MessageBox.Show("Sure", "Some Title", MessageBoxButtons.YesNo);
if(dialogResult == DialogResult.Yes)
{
    try
    {
        foreach (Process proc in Process.GetProcessesByName("_procExe"))
                {
                    proc.Kill();
                }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
else if (dialogResult == DialogResult.No)
{
    //do something else
}
 

你不能阻止它,你只要找到exe名称并杀死它

DialogResult dialogResult = MessageBox.Show("Sure", "Some Title", MessageBoxButtons.YesNo);
if(dialogResult == DialogResult.Yes)
{
    try
    {
        foreach (Process proc in Process.GetProcessesByName("_procExe"))
                {
                    proc.Kill();
                }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
else if (dialogResult == DialogResult.No)
{
    //do something else
}
 

如果可以编辑上载应用程序,可以尝试以下操作:

  • 在当前用户中创建一个注册表项,该注册表项将有一个暂停条目(0表示继续,1表示暂停),上载应用程序在上载时会定期检查该条目。 如果在注册表项中找到1,它将暂停其操作
  • 如果要暂停应用程序,请将此标志设置为1并显示确认框
  • 如果用户选择取消上载,则可以使用_proc.Kill(),否则将注册表暂停项返回到0,上载应用程序将再次拾取并恢复该项

如果您可以编辑上传应用程序,您可以尝试以下操作:

  • 在当前用户中创建一个注册表项,该注册表项将有一个暂停条目(0表示继续,1表示暂停),上载应用程序在上载时会定期检查该条目。 如果在注册表项中找到1,它将暂停其操作
  • 如果要暂停应用程序,请将此标志设置为1并显示确认框
  • 如果用户选择取消上载,则可以使用_proc.Kill(),否则将注册表暂停项返回到0,上载应用程序将再次拾取并恢复该项

为什么需要两个独立应用程序的复杂性?看起来你只是让你的生活变得更加艰难。嘿@Llama,我知道,但这是一个来自客户端的遗留应用程序,也许将来我们可以合并这些应用程序,但现在不是一个选项:(我不确定是否能帮到你。老实说,你最好的选择可能是实现某种形式的进程间通信(IPC)并协同暂停/恢复它(这也需要对其他应用程序进行更改)。“我找不到进程,也不能中断或暂停”--实际上,你在这里问的问题都不清楚。我同意前面的评论,单方面暂停流程通常不是一个好主意。但从字面上看,这似乎是你想要的。请参阅副本。如果你有一些不同的需要,请提供适当的详细解释了代码的作用,它与您想要的不同之处,以及您需要帮助的具体内容。为什么您需要两个独立应用程序的复杂性?似乎您只是让您的生活变得更加困难。嘿@Llama,我知道,但这是一个来自客户端的遗留应用程序,也许将来我们可以合并这些应用程序但此时不可选择:(我不确定是否能帮到你。老实说,你最好的选择可能是实现某种形式的进程间通信(IPC)并协同暂停/恢复它(这也需要对其他应用程序进行更改)。“我找不到进程,我不能中断或暂停”--实际上,你在这里问的问题都不清楚。我同意前面的评论,单方面暂停流程通常不是一个好主意。但从字面上看,这似乎是你想要的。请参阅副本。如果你有一些不同的需要,请提供适当的详细解释了代码的作用、它与您想要的不同之处,以及您具体需要哪些帮助。映像中的_procExe变量是完整路径应用程序,我尝试过,但找不到该过程:(@H.SIf您可以使用该命令运行它,您应该能够停止它?exe可以调用另一个应用程序?映像中的_procExe变量是完整路径应用程序,我尝试过,但找不到该进程:(@H.SIf您可以使用该命令运行它,您应该能够停止它?exe可以调用另一个应用程序?