代码之家  ›  专栏  ›  技术社区  ›  Chris

停止后台运行应用程序

  •  0
  • Chris  · 技术社区  · 15 年前

    我有一个.NET应用程序在智能手机上运行。 我希望有一种方法让应用程序在被推到后台时关闭。

    也就是说,如果用户按下“关闭”按钮一次,它就会把他们带到桌面上。不过,应用程序仍在后台运行。

    我想要一种方法来检测应用程序是否不再在前台,然后退出它。

    我试图通过LostFocus事件来实现这一点,但是当加载选项表单时,它会变得复杂,而且并不总是可靠的。

    有人能提出建议吗? 谢谢

    3 回复  |  直到 15 年前
        1
  •  1
  •   ctacke    15 年前
        2
  •  1
  •   Hasani Blackwell    15 年前

    我会听 Form.Deactivate event (或覆盖 Form.OnDeactivate Method 如果你拥有这门课)并检查 GetForegroundWindow 函数确定窗体是否在后台。如果不是,那么您就知道您的表单已发送到后台。

    E.X.

    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    public class Form1 : Form
    {
    [DllImport("coredll")]
    static extern IntPtr GetForegroundWindow();
    
    [DllImport("coredll")]
    static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
    
    protected override void OnDeactivate(EventArgs e)
    {
        base.OnDeactivate(e);
    
        //if the foreground window was not created by this application, exit this application
        IntPtr foregroundWindow = GetForegroundWindow();
        int foregroundProcId;
        GetWindowThreadProcessId(foregroundWindow, out foregroundProcId);
        using (Process currentProc = Process.GetCurrentProcess())
        {
            if (foregroundProcId != currentProc.Id)
            {
                Debug.WriteLine("Exiting application.");
                Application.Exit();
            }
        }
    }
    

    }

        3
  •  0
  •   JoshJordan    15 年前

    我认为LostFocus事件可能是最可靠的解决方案。

    如果是我,我会用反射来检查 发件人 LostFocus事件是我集会中的任何形式。如果没有,退出。