내 MainPage가 내 Windows Phone 7 응용 프로그램에서로드되면 진행 표시 줄과 사용자 정의 컨트롤의 그래픽이 포함 된 팝업 스플래시 화면이 트리거됩니다. Spash 화면을 표시 한 후에 Spash가 표시되는 동안 BackgroundWorker 스레드에서 일부 리소스를로드하는 작업을 수행합니다. 로드가 완료되면 팝업을 닫습니다. 이 기술은 WindowsPhoneGeek에 잘 설명되어 있습니다.WP7 - 디버거 세션 외부에서 스플래시 화면이 작동하지 않습니다.
Visual Studio에서 디버그를 실행할 때 완벽하게 작동하지만 디버거가 연결되지 않은 상태에서 동일한 빌드를 직접 실행하면 스플래시 화면의 애니메이션과 진행률 표시 줄이 나타나지 않으며 DoWork() 스레드가 동일한 작업을 실행하는 데 최소 두 배 이상. MainPage 생성자는 OnNavigatedTo와 마찬가지로 호출되지만, 팝업은 여전히 표시되지 않으며 기본 jpg 스플래시 이미지는 작업자 스레드가 완료 될 때까지 화면에 남아 있습니다. 그런 다음 팝업 창이 < 1 초 동안 표시되고 메인 페이지가 표시됩니다. 다시 말하지만, VS 2010을 통해 디버깅 할 때 완벽하게 작동합니다.
이것은 모두 에뮬레이터에 있으며 아직 장치가 없습니다. 나는 오늘이 사실을 알아 차 렸습니다. 그리고 우연히 (어쩌면) 어제 밤 환경을 7.1로 업데이트했습니다.
// Constructor
public MainPage()
{
InitializeComponent();
IDictionary<string, object> state = Microsoft.Phone.Shell.PhoneApplicationService.Current.State;
if (!state.ContainsKey(STATE_WAS_LOADED))
{
state[STATE_WAS_LOADED] = "LOADED";
this.LayoutRoot.Visibility = System.Windows.Visibility.Collapsed;
_popup = new Popup();
_popup.Child = new NPGSplash();
System.Diagnostics.Debug.WriteLine("{0}: Displaying Splash Popup", DateTime.Now.ToString("ss.ffff"));
_popup.IsOpen = true;
// Asynchronously load the biggest dataset
StartLoadingData();
}
}
private void StartLoadingData()
{
_worker = new BackgroundWorker();
_worker.DoWork += new DoWorkEventHandler(_worker_DoWork);
_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker_RunWorkerCompleted);
_worker.RunWorkerAsync();
}
void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Dispatcher.BeginInvoke(() =>
{
System.Diagnostics.Debug.WriteLine("{0}: Splash RunWorkerCompleted", DateTime.Now.ToString("ss.ffff"));
this.LayoutRoot.Visibility = System.Windows.Visibility.Visible;
this._popup.IsOpen = false;
});
}
편집 : 나는 내가 제대로 작동하는지 확인할 수없는 응용 프로그램을 공개하지 않도록하기 위해 이번 주에 이베이에 기기를 구입 결국
. 문제가 무엇이든 장치에서 응용 프로그램을 실행할 때 문제가 발생하지 않는다는 것을 확인할 수 있습니다. 좋은 소식. 여전히, 나는 consrtuctor가 호출 된 후 내 신청서에 약 3-5 초의 일시 중지가 나타나는 것을 설명 할 수 없습니다. 심지어 생성자에서 내 논리를 변경하여 System.Windows.Threading.DispatcherTimer
을 내 논리를 시작하기 위해 100ms에서 실행하도록 설정했습니다. 이 코드가 실행되면 생성자가 완료되지만 타이머가 3-5 초 동안 틱하지 않습니다. 매우 이상하고 시뮬레이터에서만 디버거에 연결되지 않은 경우.
나는 OnNavigatedTo에 init 코드를 넣는 것과 같은 생각을하고있었습니다. 나는 그것을 시도하고 그것은 똑같이 행동한다. 오늘 밤에 XAML에 팝업을 올리겠습니다. 나는 결코 그것을 시도하지 않았다. – CactusPCJack