簡體   English   中英

C#在父應用程序關閉時關閉子應用程序

[英]C# close the sub application when it's parent application is closing

我想在關閉子應用程序時關閉子應用程序(即fileViewer:Window)。

注意:該上級應用程序不是主應用程序。

這意味着我有3個級別的C#winform應用程序。

第一個是主應用程序,第二個是主應用程序的子應用程序,第三個是第二個子應用程序,

當我關閉第二個應用程序時,我希望第三個應用程序將自動關閉。

當應用程序關閉時,該線程關閉另一個進程 fileViewer.FileBrowser.Dispose(); ,但是我不知道在哪里調用process.close()fileViewer.FileBrowser.Dispose(); 等方法

public void OpenNewInstanceOf2nd()
{
    //Use .NET Diagnostics to start a new process off the 2nd
    try
    {
        System.Diagnostics.Process.Start(MyFramework.FileSystem.ApplicationPath + MyProperties.MyAssemblyName);
    }
    catch (Exception ex)
    {
        MyFramework.Debug.LogException(ex, "Could not open the My Utility");
    }
}

如果只是要關閉的表單,則可以將表單3rd的所有者設置為表單2nd。 如果您關閉Form 2nd,那么Form 3rd也將關閉。

private void Form2nd_Load(object sender, EventArgs e)
{
  Form3rd form_3rd = new Form3rd();
  form_3rd.Show(this);
}

如果它是嵌套的進程/工作線程,為什么不只在第二個窗體/應用程序中保留引用,而在第二個應用程序關閉時將其處置呢?

如果我正確理解您的問題,那么您有3個不同的過程,其中最后兩個過程是由前一個過程創建的:

Proc1> Proc2> Proc3

我想問的第一件事是您是否真的需要這樣的設置。 如果一切都在您的控制之下,則應考慮進行單個處理,但是如果出於某些原因您確實需要執行此操作(即,您需要運行其他命令行實用程序),請繼續...

如果在代碼中創建“子”流程,則可以保留引用:

Process proc2 = Process.Start("proc2.exe");

然后關閉該過程:

proc2.CloseMainWindow();
proc2.Close();

如果您無法控制Proc2,則可以使用以下命令從Proc1獲取對Proc3的引用

Process.GetProcessesByName("proc3.exe");

請記住,Process.CloseMainWindow()僅適用於具有窗口的應用程序,它對命令行實用程序沒有用。 控制其他第三方流程可能很棘手,這實際上取決於它們的實現方式,因此我無法更具體地說明。


在注釋的詳細信息之后,我將添加以下內容:如果從您自己的代碼啟動Proc2,則可以引用其Process對象,因此可以注冊到Exited事件,然后搜索並關閉Proc3:

proc2 = Process.Start("HelpViewer.exe");
proc2.Exited += new EventHandler(proc2_Exited);
proc2.EnableRaisingEvents = true;


void proc2_Exited(object sender, EventArgs e)
{
    //Unregister the event and free the object resources
    proc2.Exited -= new EventHandler(proc2_Exited);
    proc2.Close();

    //Search and close the other process(es)
    Process[] processes = Process.GetProcessesByName("HelpViewer.exe");
    foreach(Process process in processes)
        process.CloseMainWindow();
}

如果您不從代碼中啟動Proc2,那么沒有簡單的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM