我希望表单不会通过执行Alt+ 关闭,F4但如果Application.Exit()或this.Close从同一表单调用,则应该关闭它.
我试过CloseReason.UserClosing但仍然没有帮助.
我有一个应用程序,以一个开头SplashScreenActivity.然后,显示a LoginActivity,或者如果用户已经登录,MainActivity则显示a.如果应用程序已在运行,SplashScreenActivity则会被解除以下内容
//SplashScreenActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Adding this check for following cases
if (!isTaskRoot())
{
String intentAction = getIntent().getAction();
if (getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
finish();
return;
}
if(getIntent().getCategories().contains(GCMIntentService.INTENT_CATEGORY_GH_NOTIFICATION)){
finish();
return;
}
}
Run Code Online (Sandbox Code Playgroud)
出现问题
如果我从PlayStore等其他活动启动应用程序,它会在正确的活动中恢复,如果已经运行的话.这是Intent我用来在第二个应用程序中重现
//AnotherApplication.apk
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("my.package.name");
startActivity(launchIntent);
Run Code Online (Sandbox Code Playgroud)
但是,这个动作在某种程度上打破了Backstack.它不是在后台关闭应用程序MainActivity,而是重新启动应用程序.
//MainActivity.class
@Override
public void onBackPressed() {
if (getNavDrawerMain().isDrawerOpen()) {
getNavDrawerMain().closeDrawer();
} else {
closeApp();
}
}
protected void closeApp() { …Run Code Online (Sandbox Code Playgroud) 我有一个有两个线程的应用程序.
第一个(主线程)使用套接字捕获数据并更新DataTables
第二个将DataTables插入数据库.
应用程序工作正常,但当它关闭时,主线程完成读取数据并在第二个线程中调用Abort方法,这可能是插入数据库,这会导致数据不一致.
目前我使用以下解决方案来克服"插入时中止"
编辑:在强大的答案后,我改变了代码
void MainThread()
{
while(Read())
{
//Read Data through socket
try
{
//Wait on Mutex1
//Update Tables
}
finally
{
//Release Mutex1
}
}
_isrunning = false;
_secondThread.Join();
}
void SecondThread()
{
while(_isrunning)
{
try
{
//Wait on Mutex1
//Insert Tables into Database using transactions
}
finally
{
//Release Mutex1
}
}
}
Run Code Online (Sandbox Code Playgroud) private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
if (MessageBox.Show(this, "Do you really want to close?", "Close?",
MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我想关闭应用程序时,单击关闭按钮,消息框会按其应有的方式显示,然后我选择了“否”。然后执行 e.Cancel = true 行并且表单未关闭。
现在的问题是,在此之后,如果我从任务管理器关闭应用程序,关闭原因是 UserClosing !为什么?不应该是TaskManagerClosing吗?
像许多应用程序一样,我创建了多个窗口 我不知道也无法跟踪已经创建了多少个窗口,所以我不知道什么时候没有.
我的问题是,当所有窗口都关闭时,除非我PostQuitMessage以某种方式调用,应用程序一直运行,没有打开窗口(显然).我无法PostQuitMessage在消息处理程序中调用响应WM_DESTROY消息,因为当第一个窗口关闭时,它将关闭所有窗口,即使还有其他20个窗口仍然打开.
我的问题是如何知道何时调用PostQuitMessage(0)实际终止应用程序?
我实现了applicationWillTerminate方法,但它从未被调用过
-(void)applicationWillTerminate:(NSNotification *)notification
{
[[NSApplication sharedApplication] terminate:self];
NSLog(@"EOP");
}
Run Code Online (Sandbox Code Playgroud)
如何在应用程序关闭之前执行一些代码?
谢谢
我想在申请结束前做一些动作.
我看到有动作听众,但我没有框架或类似的东西.只是一个java文件.
我怎样才能设置某种控制?
我是C++的新手,最近开始了一个项目,我需要访问一个设备,收集某些数据并将其转发到本地网络上的数据流.
虽然我的应用程序完成所有需要它缺乏功能:当我关闭窗口时,应用程序正在运行它不会停止硬件设备.结果是,每次我完成程序时都必须进行硬件复位.这不仅不方便,而且对于程序的预期用途是不可能的.
我基本上只想设置一个函数的回调函数,当程序关闭时执行该函数(通过单击x,按Alt-F4等)
这可能吗?我有可能为这样的事件创建一个处理程序:
BOOL WINAPI ConsoleHandler(DWORD dwCtrlEvent)
{
switch (dwCtrlEvent)
{
case CTRL_CLOSE_EVENT:
// something
case CTRL_SHUTDOWN_EVENT:
// the same?
default:
return FALSE;
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是一个正确的方法,我想知道如何使用这个处理程序?我是否需要在我的程序中创建这样的处理程序并且不断更新?
我很感激任何帮助乔纳斯
我想要我的应用程序,它会在单击关闭(X)按钮时最小化到系统托盘.
只有通过单击主应用程序窗口上的其他按钮/菜单或单击系统托盘上下文menuItem才能关闭它.
我可以在关闭时使窗口最小化到托盘.
但我面临的问题是,我现在无法关闭应用程序.
这是我的代码(它无法关闭应用程序):
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void hideToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = false;
}
private void showToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = true;
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.DoEvents();
Application.Exit();
}
private void Form1_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == this.WindowState)
{
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(500);
this.Hide();
}
else if (FormWindowState.Normal == this.WindowState)
{
notifyIcon1.Visible = false;
}
}
private void …Run Code Online (Sandbox Code Playgroud) c# ×4
winforms ×3
c++ ×2
winapi ×2
.net ×1
android ×1
back-stack ×1
c ×1
cocoa ×1
database ×1
detect ×1
eventhandler ×1
java ×1
macos ×1
taskmanager ×1