【问题标题】:How do I run an action after a program has closed?程序关闭后如何运行操作?
【发布时间】:2014-01-08 20:11:32
【问题描述】:

我是 c# 的新手,我发现它与我的 PHP 起源完全不同,所以我可能完全错了。但是,据我了解,它非常准确。基本上我需要在我的表单中单击按钮启动一个程序(该部分运行良好)然后当用户关闭程序时我需要运行一个操作,在这种情况下我显示一个消息框。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;

namespace usb
{
    class Applications
    {
        //condition variables
        public static bool CalcStatus = false;

        public static void Calc()
        {
            Process CALC;
            CALC = Process.Start("calc.exe");
            if (CALC.HasExited)
            {
                MessageBox.Show("CALC has exited");
                CalcStatus = true;
            }
        }
    }
}

这个sn-p是一个类的一部分,另一个类使用这个函数,调用时calc会打开,当calc关闭时不会弹出框提示。有谁知道我做错了什么?欢迎大家多多指教,我还在学习中:)

【问题讨论】:

标签: c# .net


【解决方案1】:

您使用Exited 事件在进程退出时运行一些代码:

CALC.EnableRaisingEvents = true;
CALC.Exited += (sender, args) => MessageBox.Show("CALC has exited");

【讨论】:

  • 做到了!非常感谢
【解决方案2】:

方法一: 显示消息等待

//condition variables
public static bool CalcStatus = false;

public static void Calc()
{
    var calc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "calc.exe"
        }
    };
    calc.Start();
    calc.WaitForExit();
    MessageBox.Show("CALC has exited");
    CalcStatus = true;
}

方法二: 显示消息无需等待

//condition variables
public static bool CalcStatus = false;

public static void Calc()
{
    var calc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "calc.exe"
        },
        EnableRaisingEvents = true,
    };
    calc.Exited += calc_Exited;

    calc.Start();
    CalcStatus = true;
}

static void calc_Exited(object sender, EventArgs e)
{
    MessageBox.Show("CALC has exited");
}

【讨论】:

  • 第一个解决方案是阻塞 UI 线程,这是这里的一个主要问题。
  • 您应该使用第二种解决方案,第一种解决方案是为了澄清两种方法之间的差异。
  • 1) 如果是这种情况,那么答案应该是这样的,事实上,您的答案似乎主张同时使用这两种方法。 2) 如果您的目标是澄清差异,那么澄清差异。您还没有解释它们有何不同,您只是展示了两种解决方案。
  • 感谢@Servy,我解释了因为用户是 c# 开发的新用户
  • 但是你根本没有解释什么。这就是我的观点。您只是提供了两个解决方案,但没有解释为什么其中一个是错误的并且不能解决他的问题,它们有何不同等等。如果您真的解释了一些事情,那么答案可能有价值.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多