我在这里检查了所有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()
... 我真的可以使用一些见解。
我总是可以打破这个项目,这将是笨重的。最好了解为什么/如何启动敏感的孩子。