我希望在我的位图完全保存后暂停我的应用程序?
答案 0 :(得分:7)
除非你在一个单独的线程中调用该方法,否则我相当确定它将在方法返回时完全保存:
bitmap.SaveToFile(..);
// file is completely saved at this point
是什么导致您相信此时 已完全保存?
唯一的皱纹可能是“懒惰写入”Windows本身可能尚未完成将文件物理写入光盘的业务,但就您的应用程序(或任何其他应用程序)而言,这是无关紧要的。如果您在Windows完成将其提交到光盘之前尝试访问该文件,该应用程序将“阻止”直到它可以安全地访问该文件,但您不需要专门处理它,它“只是工作”。
答案 1 :(得分:0)
如果要干净地暂停应用程序,可以选择以下几种方法:
1)关闭主表格。当您关闭主窗体时,应用程序将关闭。
procedure TForm1.SaveAndClose(Filename:String);
begin
Bitmap.SaveToFile(filename);
Application.Mainform.Close;
end;
2)致电 Application.Terminate 。这会突然关闭您的应用程序,但会运行任何终结代码。通常在应用程序收到WM_Quit消息或主窗体关闭时调用它。
procedure TForm1.SaveAndClose(Filename:String);
begin
Bitmap.SaveToFile(filename);
Application.Terminate;
end;
3)将 wm_Close 发布到您的应用程序/主表单。这具有额外的优点,即处理应用程序队列中的任何其他消息。它相当于按下CTRL-F4或按下主窗体右上角的“X”。唯一的问题是,如果消息队列已满,则可能无法访问该表单(罕见)。
procedure TForm1.SaveAndClose(Filename:String);
begin
Bitmap.SaveToFile(filename);
postMessage(Application.MainForm,wm_close,0,0):
end;
4)调用暂停(ExitCode:Integer)。这有点极端,将终止应用程序。终结代码仍将运行,但不保证释放内存。您可以选择设置退回代码,退回代码将返回给调用应用程序。
procedure TForm1.SaveAndClose(Filename:String);
begin
Bitmap.SaveToFile(filename);
Halt(0);
end;