繁体   English   中英

C#Winforms:是否可以使用从主Program.cs调用的形式的函数?

[英]C# Winforms: Is it possible to have a function in a form called from the main Program.cs?

因此,我的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();
    }

您只需要保留对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();
    }
}

我认为您尝试执行的操作没有任何开箱即用的功能。 您可以让主机应用程序实现TCP套接字,然后生成的其他应用程序充当TCP客户端,并发送命令并获得响应,无论他们说是还是否。 如果您对“ external.exe”程序没有任何控制,则此方法将无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM