2012-08-16 5 views
0

그래서 .NET 4.0으로 작성된 WPF 응용 프로그램이 있습니다. 응용 프로그램에는 XML 파일을 검색하는 OpenFileDialog를 수행하는 가져 오기 버튼이 있습니다. 파일을 연 다음 XML을 통해 읽고 데이터를 검색하여 Properties.Settings.Default에 저장합니다. 기본적으로 사람들이 설정을 내보내고 가져올 수있는 시스템입니다. 잘 작동합니다.이전 동작이 완료 될 때까지 지연 동작?

지금 내가하고 싶은 것은 가져온 후에 새 설정을 저장 한 다음 응용 프로그램을 종료하고 다시 시작한다는 것입니다. 간단하고, 설정을 저장하고, 앱의 새로운 인스턴스를 시작하고, 오래된 인스턴스를 죽입니다.

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 디버깅 디렉토리와 같은 디렉토리에서 시작되지 않으므로 저장된 설정을 사용하지 않았습니다. –

0

save 메소드가 저장을 완료하거나 프로세스 시작을 호출 할 때 리턴을 수행하지 않는 이유는 무엇입니까? 첫 번째가 끝날 때까지 앱을 시작할 수 없어야합니다.

+0

그의 저장 방법이 아니라 ['SettingsBase.Save'] (http://msdn.microsoft.com/en-us/library/system.configuration.settingsbase.save.aspx)입니다. –

관련 문제