Вопрос о пространстве имен WPF - процесс? - PullRequest
0 голосов
/ 05 декабря 2008

Попытка заставить этот пример работать с http://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-with-WPF.aspx

Однако я не могу понять, как правильно использовать пространство имен или синтаксис для «Process» ниже.

<Border x:Name="panelDialog" Visibility="Collapsed">
<Grid>
<Border Background="Black" Opacity="0.49"></Border>
<!--While Xmal Content of the dialog will go here-->
</Grid>
</Border>

В блоге говорится, что .....

Просто поставьте две функции для скрытия и отображения диалога. Общий код приведен ниже. В приведенном ниже коде я показал экран загрузки с эффектом светового короба. При отображении модального диалога просто вызовите show и скройте методы экрана ожидания. Хорошо отправлять ваши расширенные задания процессора в фоновый поток и использовать диспетчер для обновления пользовательского интерфейса, пока вы находитесь в фоновом потоке.

<Page x:Class="Home">
<Grid>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<!--All the contents will go here-->
</ScrollViewer>
<Border x:Name="panelLoading" Visibility="Collapsed">
<Grid>
<Border Background="Black" Opacity="0.49"></Border>
<local:TMEWaitScreen></local:TMEWaitScreen>
</Grid>
</Border>
</Grid>
</Page>

Вот код позади

#region About Wait Screen
/// <summary>
/// Show wait screen before a web request
/// </summary>
public void ShowWaitScreen()
{
Process del = new Process(ShowWaitScreenUI);
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, del);
}
private void ShowWaitScreenUI()
{
panelLoading.Visibility = Visibility.Visible;
}
/// <summary>
/// Hide a wait screen after a web request
/// </summary>
public void HideWaitScreen()
{
Process del = new Process(HideWaitScreenUI);
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, del);
}
private void HideWaitScreenUI()
{
panelLoading.Visibility = Visibility.Collapsed;
}
#endregion

У меня проблемы именно с этими строками:

Process del = new Process(ShowWaitScreenUI);

Единственный процесс, который я могу найти, находится в System.Diagnostics и не принимает аргументов. Это сообщение в блоге, которое я пытаюсь узнать, или я просто не в том месте?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2008

Похоже, что человек, который написал блог, забыл определить свой собственный делегат с именем Process (немного странное имя для него).

private delegate void Process();

Теперь он должен скомпилироваться с определением.

Но мне нравятся такие имена.

private delegate void HideWaitScreenHandler();
private delegate void ShowWaitScreenHandler();

На самом деле вы можете изменить его, чтобы сделать его более простым.

private delegate void ShowWaitScreenUIHandler(bool show);

void ShowWaitScreenUIThreaded(bool show)
{
    Process del = new ShowWaitScreenHandler(OnShowWaitScreenUI);
    Dispatcher.Invoke(DispatcherPriority.Normal, del, show);
}

void OnShowWaitScreenUI(bool show)
{
    panelLoading.Visibility = show ? Visibility.Visible : Visibility.Collapsed;
}
1 голос
/ 05 декабря 2008

Опечатки здесь: Process и ShowWaitScreenHandler необходимо изменить на ShowWaitScreenUIHandler.

DispatcherPriority требует использования. Щелкните правой кнопкой мыши DispatcherPriority и выберите «Разрешить».

...