2

私は現在、クラスを介して外部デバイスと通信するクラスに取り組んでいSerialPortますが、デバイスが送り返すメッセージに従って UI を更新する必要があります。

次のコードを試しましたが、うまくいきません。

using System.IO.Ports;

namespace LearningSteps
{
    /// <summary>
    /// Interaction logic for Comm.xaml
    /// </summary>
    /// 

    public class Teste
    {
        private SerialPort _myPort;

        public Teste(SerialPort P) { _myPort = P; }

        public void Funcao(SerialDataReceivedEventHandler H)
        {
            _myPort.DataReceived += H;
            byte[] vetor = new byte[] { 0x24, 0x24, 0xCF, 0x00, 0x01, 0x02, 0x25, 0x33, 0x7E };
            _myPort.Write(vetor, 0, 9);
        }
    }

    public partial class Comm : Window
    {
        SerialPort port;
        Teste T;

        public delegate void AtualizaCallBack(string message);
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

        public Comm()
        {
            InitializeComponent();
            port = new SerialPort("COM5",115200,Parity.None,8,StopBits.One);
            port.RtsEnable = false;
            port.DtrEnable = false;
            port.Handshake = Handshake.None;
            port.NewLine = "~";
            port.Open();
            T = new Teste(port);

        }

        private void Recebido(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            String indata = sp.ReadExisting();

            my_label.Dispatcher.Invoke(new AtualizaCallBack(this.atualiza),new object[]{indata});

        }

        private void bt_Click(object sender, RoutedEventArgs e)
        {
            T.Funcao(Recebido);
        }

        private void atualiza(string s)
        {
            byte[] vet = encoding.GetBytes(s);
            my_label.Content = BitConverter.ToString(vet);
        }

    }
}

SerialDataReceivedEventHandlerコンパイルしようとするとエラーが発生します。これは、内部を引数として送信しようとしているためだと思います。T.Funcaoしかし、それ以外の方法で UI を使用および更新する方法がわかりません。

エラーには、「PresentationFramework.dll で「System.Window.Markup.XamlParseException」タイプの未処理の例外が発生しました

追加情報: 「指定されたバインディング制約に一致するコンストラクター型 'LearningSteps.Comm' の呼び出しにより、例外がスローされました。」行番号「3」および行位置「9」。

この例外のハンドラがあれば、プログラムは安全に続行できます。」

誰か助けてくれませんか?

4

0 に答える 0