2012-08-16 56 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