Курсор ожидания WPF с потоком BackgroundWorker - PullRequest
3 голосов
/ 18 апреля 2009

Я хочу показать курсор песочных часов и отключить окно, пока процесс BackgroundWorker выполняется в другом потоке.

Вот что я делаю:

Private Sub MyButton_Click(...)
    Dim box As New AnotherWpfWindow()
    box.Owner = Me
    ...
    box.ShowDialog()
    If (box.DialogResult.GetValueOrDefault = True) Then
        Me.IsEnabled = False
        Me.Cursor = Cursors.Wait
        MyBackgroundWorker.RunWorkerAsync()
    End If
End Sub

Private Sub MyBackgroundWorker_RunWorkerCompleted(...)
    UpdateInterface()
    Me.IsEnabled = True
    Me.Cursor = Cursors.Arrow
End Sub

Окно отключается, как я хочу, но курсор остается стрелкой. Как я могу сделать это курсор ожидания?

Кажется, он работает для vg1890 в соответствии с этим вопросом: Отключение всех, кроме одного элемента управления в окне WPF

Ответы [ 2 ]

11 голосов
/ 21 ноября 2011

Другим способом является изменение курсора глобально, это ..

Mouse.OverrideCursor = Cursors.Wait;

//Do something
//...

Mouse.OverrideCursor = null;
8 голосов
/ 18 апреля 2009

Здесь, похоже, происходит то, что WPF игнорирует настройку Cursor в отключенном окне. Кажется, работает следующий обходной путь: вместо отключения самого окна отключите content окна:

C #:

((UIElement)Content).IsEnabled = false;
Cursor = Cursors.Wait;

// and in RunWorkerCompleted handler:
((UIElement)Content).IsEnabled = true;
Cursor = Cursors.Arrow;

Visual Basic:

DirectCast(Content, UIElement).IsEnabled = False
Cursor = Cursors.Wait

' and in RunWorkerCompleted handler:'
DirectCast(Content, UIElement).IsEnabled = True
Cursor = Cursors.Arrow
...