-1

最初に次の関数DrawDTSRanksChart()を呼び出すスレッドを開始すると、「多くのUIコンポーネントがこれを必要とするため、呼び出し元のスレッドはSTAである必要があります」というエラーが発生しました。

スレッド呼び出しに次の行を追加した後

UpdateThread.SetApartmentState(ApartmentState.STA)

「別のスレッドがオブジェクトを所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません」

コメントされた行は両方の例外をスローします

Public Update Thread As System.Threading.Thread

Private Sub DrawDTSRanksChart()
    Dim DTSRankingDiagram As New XYDiagram2D
    Dim series1 As New AreaFullStackedSeries2D 
    ChartControl1.Diagram = DTSRankingDiagram 'this line throws the exption
    DTSRankingDiagram.Series.Add(series1)
    series1.Points.Add(New SeriesPoint("Ranked 1.", DTSr1counter))
    series1.Points.Add(New SeriesPoint("Ranked 2.", DTSr2counter))
    series1.Points.Add(New SeriesPoint("Ranked 3.", DTSr3counter))
    series1.Points.Add(New SeriesPoint("Ranked >3.", DTSrm3counter))
End Sub

Private Sub save_Clicked(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles NormalUpdate.ItemClick
    UpdateThread = New System.Threading.Thread(AddressOf update)
    UpdateThread.SetApartmentState(ApartmentState.STA)
    UpdateThread.Start()
End Sub

UIがハングしないように、バックグラウンドワーカーが必要です

4

1 に答える 1

0

解決

Dim MyDispatcher = Windows.Threading.Dispatcher.CurrentDispatcher
Private Delegate Sub UpdateUIDelegate()

関数を次のように呼び出します

 MyDispatcher.BeginInvoke(DispatcherPriority.Background, New UpdateUIDelegate(AddressOf DrawDTSRanksChart))
于 2012-08-18T20:06:51.990 に答える