2012-04-26 56 views
0

如何加载WPF的主要形式,以便单独的线程在窗体处于房间状态时从数据库获取数据? (拖能/移动)WPF加载,以便我可以移动表格

我知道这是可能与您的主要形式打开一个新的窗口,像这样:

Private Sub openOrderWindow() 
    Dim OrderWindow As Orders = New Orders 
    OrderWindow.ShowDialog() 
End Sub 

Private Sub ButtonImport_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles ButtonImport.Click 
    Dim iThread As System.Threading.Thread = New System.Threading.Thread(AddressOf openOrderWindow) 
    iThread.SetApartmentState(System.Threading.ApartmentState.STA) 
    iThread.Start() 
    ListViewOrderDetail.Focus() 
    ' Me.Close() 
End Sub 

因为我用“的ShowDialog”

但在主窗口我不能打电话的ShowDialog

我曾尝试:

Private Sub AccessDBFilling() 
ListViewDataGrid.ItemsSource = Nothing 
    accessdblist = Nothing 
accessdblist = accessdb.GetFromAccess() 
ListViewDataGrid.ItemsSource = accessdblist 
End Sub 

Private Sub refresh() 
    ListViewDataGrid.Dispatcher.Invoke(New Action(AddressOf AccessDBFilling)) 
End Sub 

Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
    iThread = New System.Threading.Thread(AddressOf refresh) 
    iThread.SetApartmentState(System.Threading.ApartmentState.STA) 
    iThread.Start() 
End Sub 

我试图把MyBase.ShowDialog().Show()和.9000+其他事情

唯一的好处我已经得到了使用单独的线程从DATABSE负载我可以看到屏幕的时候了(中作为反对它是一个透明的盒子,直到它加载),但我不能移动它或最小化它

有没有办法让它移动,而它加载?

回答

1

是的。你应该明白你做了什么。

ListViewDataGrid.Dispatcher.Invoke(New Action(AddressOf AccessDBFilling)) 

UI控件的调度程序对应于UI线程。所以UI被冻结,因为你在UI线程上准确加载数据。

这里你应该做的:

Private Sub AccessDBFilling() 
    ListViewDataGrid.ItemsSource = Nothing 
    accessdblist = Nothing 
    accessdblist = accessdb.GetFromAccess() 
    //I'm not sure, but you can try the following lines of code. uncomment one of them. 

    //ListViewDataGrid.Dispatcher.Invoke(() => ListViewDataGrid.ItemsSource = accessdblist); 
    //ListViewDataGrid.ItemsSource = accessdblist; 
End Sub 

Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
    Action loadFromDb = AccessDBFilling; 
    loadFromDb.BeginInvoke(); 
End Sub 

正如我不知道VB,你应该把它从C#:)翻译

+0

行动loadFromDb = AccessDBFilling说“表达不产生价值'但无论如何,我是因为你写的内容才能工作,所以我会接受这个答案 – 2012-04-27 11:45:33

相关问题