2

シリアル オブジェクトを使用して Arduino からいくつかの値を取得する Field というクラスを作成しています。クラスによって発生するイベントがあり (データがシリアル ポートから多かれ少なかれ受信されたとき)、それが発生したときに、このクラスからデータを取得する必要があります。以下のコードは機能しますが、必要な方法で機能していないようです。スレッドがどのように機能するかについての私の知識はほとんどありません。シリアルポートオブジェクトが独自のスレッドで実行されるため、それを操作するのが非常に苦痛になることを知っているだけです。

Private Sub Field_eScore() Handles Field.eScore

    If InvokeRequired Then
        Invoke(Sub() lbl_COM_data.Text = Field.GetComData())
    Else
        lbl_COM_data.Text = Field.GetComData()
    End If

End Sub

これらの「InvokeRequired」If-Then 条件を使用せずに、この別のスレッドで動作するデータに簡単にアクセスする方法はありますか? この場合にスレッドがどのように機能するかについての詳細情報も素晴らしいでしょう。

4

1 に答える 1

0

InvokeRequiredUIは、コントロールを作成したスレッド(通常はメインスレッド)によってのみ変更できるため、が必要です。

それを「回避」するには、責任を分離するようにコードを設計します。シリアルポートを処理するコードとは別のレイヤーでUIの変更を維持します。

InvokeRequiredバックエンドをUIとインターフェースする場所があるかどうかを確認する必要がありますが、1つの「レイヤー」にのみ存在する必要があります。

于 2012-11-04T06:55:22.963 に答える