WPF子窗口(也是WPF)运行,但没有响应

时间:2014-07-10 17:48:01

标签: wpf vb.net windows multithreading xaml

我在这里检查了所有8场比赛,但没有一个有这种症状:

我有一个旋转的世界/鼠标操纵杆XAML项目在WPF窗口中正常运行 - 只要该窗口是"启动URI"在我的项目属性 - >申请 - > Statup URI 。它响应鼠标&键盘如预期的那样。

但是,当我从代码(菜单点击,.Show())调用同一个类作为父WPF窗口的时,子项显示精细甚至动画 - 但是< em>完全没有响应鼠标&amp;键盘(关闭窗口本身除外。

现在这里有一个奇怪的部分/提示可能告诉合适的人问题是什么:

当我通过单击关闭(&#34; x&#34;)小部件关闭子WPF窗口时,窗口消失,但我可以看到它仍然生成日志条目!

考虑到以线程为中心的需求,我尝试了以下内容而不改变症状:

一个。只需称呼它:

Dim wpfEarth As New vASA.TheEarthWindow
wpfEarth.Show()

B中。调度员: (调用function / sub):

Dim thread = New Thread(New ThreadStart(AddressOf Me.DisplayEarthOnThread))
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()
[...]

Private Sub DisplayEarthOnThread()
    Try
        Dim wpfEarth As New vASA.TheEarthWindow
        wpfEarth.Show()
        AddHandler wpfEarth.Closed, Sub(s, e) wpfEarth.Dispatcher.InvokeShutdown()
        System.Windows.Threading.Dispatcher.Run()
    Catch ex As Exception
        [...]
    End Try
End Sub

℃。大量随机变化(Me.Dispatcher,MyBase.Dispatcher,......):

Dispatcher.Invoke(Sub()
    Dim wpfEarth As New vASA.TheEarthWindow
    wpfEarth.Show()
    AddHandler wpfEarth.Closed, Sub(sender2, e2) wpfEarth.Dispatcher.InvokeShutdown()
    System.Windows.Threading.Dispatcher.Run()
        End Sub)

d。这是支持在关闭时杀死子窗口,但不会像上面那样无法响应:

Dim newWindowThread As New Thread(New ThreadStart(Sub()
    ' When the window closes, shut down the dispatcher
    ' Start the Dispatcher Processing
    Dim tempWindow As New TheEarthWindow()
    AddHandler tempWindow.Closed, Sub(s2, e2) Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background)
    tempWindow.Show()
        System.Windows.Threading.Dispatcher.Run()
        End Sub))
newWindowThread.SetApartmentState(ApartmentState.STA)
' Make the thread a background thread
newWindowThread.IsBackground = True
' Start the thread
newWindowThread.Start()

... 我真的可以使用一些见解。

我总是可以打破这个项目,这将是笨重的。最好了解为什么/如何启动敏感的孩子。

0 个答案:

没有答案