所以,我在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();
}
答案 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”程序没有任何控制权,则不起作用。