2009-09-13 49 views

回答

7

除非你调用该方法在一个单独的线程我相当肯定,这将是完全保存处该方法返回点:

bitmap.SaveToFile(..); 
    // file is completely saved at this point 

是什么导致你相信,它是不是在这一点完全保存?

唯一的问题可能是“懒惰的写入”Windows本身可能还没有完成将文件物理写入光盘的业务,但就您的应用程序(或任何其他应用程序)而言,这是无关。如果您在Windows完成提交文件之前尝试访问该文件,该应用程序将简单地“阻止”,直到它可以安全地访问该文件,但您不需要专门处理该文件,它就会“正常工作”。

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:整数)。这有点极端,会终止应用程序。终结代码仍将运行,但内存不保证被释放。或者,您可以设置退出代码,该代码将返回给调用应用程序。

procedure TForm1.SaveAndClose(Filename:String); 
begin 
    Bitmap.SaveToFile(filename); 
    Halt(0); 
end;