最初に次の関数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がハングしないように、バックグラウンドワーカーが必要です