我在智能手机上运行.NET应用程序。 我想要一种方法让应用程序在被推入后台时关闭。
即。如果用户将它们带到桌面后按下关闭按钮。该应用程序仍然在后台运行。
我想要一种方法来检测应用程序不再在前台并退出它。
我尝试通过LostFocus事件执行此操作,但是当加载选项表单时它变得复杂并且并不总是可靠的。
有人可以提供建议吗? 感谢
答案 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 是否是我程序集中的任何表单。如果没有,请退出。