2012-08-16 54 views
0

所以我有一個用.NET 4.0編寫的WPF應用程序。在應用程序中,有一個導入按鈕,該按鈕用於搜索XML文件的OpenFileDialog。打開文件後,它通過XML讀取數據,並從中檢索數據並將其存儲在Properties.Settings.Default中。基本上,它是一個人們可以導出和導入設置的系統。工作很好。直到上一個動作完成後的延遲動作?

現在,我想要做的是在導入之後,它會保存新設置,然後KILLS應用程序並重新啓動它。簡單,保存設置,啓動應用程序的新實例,殺死舊實例。

Properties.Settings.Default.Save(); 
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location); 
System.Diagnostics.Process.GetCurrentProcess().Kill(); 

但是,問題是應用程序的新實例往往開始是設置保存完成之前。所以新實例啓動檢索舊設置。我想我可以通過在流程中添加一個簡單的睡眠來解決這個問題;但是這很不方便。

System.Threading.Thread.Sleep(1000); 

如果保存過程需要超過1000毫秒,該怎麼辦?那麼老問題仍然存在。我知道我可以增加睡眠計時器,但我相信必須有更好的方法。有沒有辦法讓它最後2行不激活,直到第一行完成後?

回答

1

從來沒有聽說過Save是異步的,的,作爲最後的手段,你可以使用一個FileSystemWatcher監控受影響的文件,並調用你的代碼時,有沒有更多的變化。

+0

你是對的,它不是異步的。事實證明,當我在應用程序上運行Process.Start時,它不會在與F5調試目錄相同的目錄中啓動它,因此它沒有使用保存的設置。 – 2012-08-18 07:39:55

0

爲什麼你的save方法在完成保存或讓它調用Process Start時執行返回。在這種情況下,你不應該能夠啓動應用程序,直到第一個完成節能

+0

這不是他的保存方法,它是['SettingsBase.Save'](http://msdn.microsoft.com/en-us/library/system.configuration.settingsbase.save.aspx)。 – 2012-08-16 00:49:17