別のスレッドvb.netから(Tの)BindingListを更新します

コーダー

私は数日前に他のスレッドからBindingListInvokeを探していましたが、vb.netで適切なソリューションを取得できませんでした。それらのほとんどは、C#ですが、理解するのが難しいと感じています。したがって、2つのフォーム(Form1とForm2)と1つのクラスを持つ小さなアプリケーションを作成しました。Form1はメインUIスレッドになり、Form2は別のスレッドで実行されます。

Form1には、(Tの)共有BindingListにバインドされたDataGrindViewとButtonがあり、ButtonをクリックするとForm2が別のスレッドにロードされます。

これがForm1コードです:

Imports System.ComponentModel
Imports System.Threading
Public Class Form1
    Public Shared ListOfNames As BindingList(Of Names) = New BindingList(Of Names)

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataGridView1.DataSource = ListOfNames
        DataGridView1.Columns("FullName").DataPropertyName = "FullName"
    End Sub

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        Dim thread As Threading.Thread = New Threading.Thread(AddressOf loadQuoteForm)
        thread.SetApartmentState((ApartmentState.STA))
        thread.Start()
    End Sub

    Private Sub loadQuoteForm()
        Dim SecondForm As Form2 = New Form2
        Application.Run(SecondForm)
    End Sub
End Class

Form2にはボタンがあり、クリックするとNamesクラスインスタンスが作成され、その1つのプロパティが変更され、Form1.BindingList(of T)に追加されます。

Form2コードは次のとおりです。

Public Class Form2
    Private Sub btnTestFromDiffTread_Click(sender As Object, e As EventArgs) Handles btnTestFromDiffTread.Click
        Try
            Dim myName As Names = New Names
            myName.FullName = "John Peter"
            Form1.ListOfNames.Add(myName)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
End Class


Imports System.ComponentModel
Public Class Names
    Implements System.ComponentModel.INotifyPropertyChanged
    Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
    Private _fullName As String
    Public Property FullName() As String
        Get
            Return _fullName
        End Get
        Set(ByVal value As String)
            _fullName = value
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("FullName"))
        End Set
    End Property
End Class

しかし、ご想像のとおり、Form2のボタンをクリックするとすぐに例外がスローされます:ここに画像の説明を入力してください

誰かが私がどこで呼び出すか委任するべきかを提案できますか、サンプルのVB.netコードは非常に高く評価されています

マットウィルコ

問題の原因となっているのはDataGridViewの更新です。

あなたのコメントから、DataGridViewがDataGridViewのDataSourceにバインドされているためであることがわかります。したがって、別のスレッドでこれを行う場合、このリストを更新するとクロススレッド操作が発生します。

1つの解決策は、ListOfNames公開せず、このリストに追加できる新しい方法を用意することです。

Private Shared ListOfNames As BindingList(Of Names) = New BindingList(Of Names)

Public Sub AddNameToList(newNames As Names)
    DataGridView1.BeginInvoke(Sub() ListOfNames.Add(newNames))
End Sub

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別のスレッド(VB.NET)WPFからの制御の更新

分類Dev

VB.NET-別のスレッドから値を読み取る方法

分類Dev

vb.netのBindingList(Of T)を使用したWinformsクロススレッドデータバインディング

分類Dev

VB.Net別のスレッドでタスクを実行する

分類Dev

別のスレッドから呼び出すときにVB.NETロードDatagridviewが例外をスローしました

分類Dev

vb.netの別のクラスからGUIを更新します

分類Dev

他のスレッドからのVB.net更新ラベル

分類Dev

別のスレッドからデータグリッドのItemSourceを更新します

分類Dev

別のスレッド内からラベルを更新する

分類Dev

別のスレッドからUIを更新する

分類Dev

別のスレッドからAnchorPaneを更新するJavaFX

分類Dev

vb.net : 別のフォーム/スレッドから JSON からデータグリッドにデータを収集する際のエラー

分類Dev

コマンドを実行している別のスレッドからTkinterGUIを更新します

分類Dev

スレッドの識別

分類Dev

別のスレッドまたはプロセスからGtk.ProgressBarを更新します

分類Dev

VB.NETを使用してイーサネットとWiFiのIPアドレスを区別する方法

分類Dev

別のスレッドのモジュールからラベルを更新しています

分類Dev

他のスレッドからAtomicIntegerを更新します

分類Dev

別のスレッドからRecyclerViewを更新すると、エラーが発生します

分類Dev

別のスレッドからの高頻度のAndroidUIスレッドの更新?

分類Dev

別のスレッドからメインスレッドの関数を呼び出しますか?

分類Dev

別のスレッドからUI要素にアクセスしようとしているVB.netが機能していません

分類Dev

Android:別のクラスのスレッドからUIを更新する

分類Dev

glib / gtkの別のスレッドからシグナルを出力します

分類Dev

WSAAsyncSelectを選択し、別のスレッドから送信します

分類Dev

javafx、別のスレッドからuiを更新

分類Dev

Javaの別のスレッドからSWT GUIを更新する方法

分類Dev

WPFの別のスレッドからImage.sourceを更新する

分類Dev

別のクラスとスレッドからのインターフェイスコールバックからwinformを更新します

Related 関連記事

  1. 1

    別のスレッド(VB.NET)WPFからの制御の更新

  2. 2

    VB.NET-別のスレッドから値を読み取る方法

  3. 3

    vb.netのBindingList(Of T)を使用したWinformsクロススレッドデータバインディング

  4. 4

    VB.Net別のスレッドでタスクを実行する

  5. 5

    別のスレッドから呼び出すときにVB.NETロードDatagridviewが例外をスローしました

  6. 6

    vb.netの別のクラスからGUIを更新します

  7. 7

    他のスレッドからのVB.net更新ラベル

  8. 8

    別のスレッドからデータグリッドのItemSourceを更新します

  9. 9

    別のスレッド内からラベルを更新する

  10. 10

    別のスレッドからUIを更新する

  11. 11

    別のスレッドからAnchorPaneを更新するJavaFX

  12. 12

    vb.net : 別のフォーム/スレッドから JSON からデータグリッドにデータを収集する際のエラー

  13. 13

    コマンドを実行している別のスレッドからTkinterGUIを更新します

  14. 14

    スレッドの識別

  15. 15

    別のスレッドまたはプロセスからGtk.ProgressBarを更新します

  16. 16

    VB.NETを使用してイーサネットとWiFiのIPアドレスを区別する方法

  17. 17

    別のスレッドのモジュールからラベルを更新しています

  18. 18

    他のスレッドからAtomicIntegerを更新します

  19. 19

    別のスレッドからRecyclerViewを更新すると、エラーが発生します

  20. 20

    別のスレッドからの高頻度のAndroidUIスレッドの更新?

  21. 21

    別のスレッドからメインスレッドの関数を呼び出しますか?

  22. 22

    別のスレッドからUI要素にアクセスしようとしているVB.netが機能していません

  23. 23

    Android:別のクラスのスレッドからUIを更新する

  24. 24

    glib / gtkの別のスレッドからシグナルを出力します

  25. 25

    WSAAsyncSelectを選択し、別のスレッドから送信します

  26. 26

    javafx、別のスレッドからuiを更新

  27. 27

    Javaの別のスレッドからSWT GUIを更新する方法

  28. 28

    WPFの別のスレッドからImage.sourceを更新する

  29. 29

    別のクラスとスレッドからのインターフェイスコールバックからwinformを更新します

ホットタグ

アーカイブ