停止在后台运行的应用程序

时间:2009-07-14 15:47:44

标签: c# .net compact-framework

我在智能手机上运行.NET应用程序。 我想要一种方法让应用程序在被推入后台时关闭。

即。如果用户将它们带到桌面后按下关闭按钮。该应用程序仍然在后台运行。

我想要一种方法来检测应用程序不再在前台并退出它。

我尝试通过LostFocus事件执行此操作,但是当加载选项表单时它变得复杂并且并不总是可靠的。

有人可以提供建议吗? 感谢

3 个答案:

答案 0 :(得分:1)

我会听取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();
        }
    }
}

}

答案 1 :(得分:1)

答案 2 :(得分:0)

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

如果是我,我会使用Reflection来检查LostFocus事件的 sender 是否是我程序集中的任何表单。如果没有,请退出。