C#Winforms:是否可以在主Program.cs中调用一个函数?

时间:2016-08-02 22:20:28

标签: c# winforms

所以,我在Program.cs中有这个Exited事件,我有我的应用程序的主要入口点。它打开另一个外部程序并监视其状态。如果此外部程序关闭,则需要在最初打开的表单上弹出一个对话框。我知道如何捕获已退出的事件,但我需要使用我想要执行的操作在另一个表单上调用或运行函数。

public static class Program
{
    public static void ExternalProgramFunction()
    {
        System.Diagnostics.Process startExternal = System.Diagnostics.Process.Start("external.exe", String.Format(ConnectionArg));
        startExternal.EnableRaisingEvents = true;
        startExternal.Exited += ExternalProgramExits;
    }

    public static void ExternalProgramExits(object sender, EventArgs e)
    {
        if (UserClose == false)
        {
            /// Need code here to open dialog box on another form!!!
        }
    }
    /// The main entry point for the application.
    [STAThread]
    static void Main(string[] arguments)
    {
        UserClose = false;

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Manager());

我希望此代码执行以下另一种形式的函数。我这样做是为了打开对话框并保持表单无法单击。我在下面列出的是我的另一种形式的代码。我想从Program.cs

运行prematureclosepopup
    public Manager()
    {
        InitializeComponent();
    }
    public void PrematureClosePopup()
    {
        ManagerWarning messagepopup = new ManagerWarning();
        messagepopup.ShowDialog();
    }

2 个答案:

答案 0 :(得分:0)

您只需要保留对Manager对象的引用:

static Manager _someClassMemberVariable;

然后将Main()中的最后一行更改为:

_someClassMemberVariable = new Manager();
Application.Run(_someClassMemberVariable);

然后,您可以将ExternalProgramExits()方法更改为:

public static void ExternalProgramExits(object sender, EventArgs e)
{
    if (UserClose == false)
    {
        _someClassMemberVariable.PrematureClosePopup();
    }
}

答案 1 :(得分:-1)

我认为你想要做的事情没有任何开箱即用的东西。您可以让您的主机应用程序实现TCP套接字,然后您生成的其他应用程序充当TCP客户端并发送命令并获得响应,无论他们是否表示。如果您对“external.exe”程序没有任何控制权,则不起作用。