2

始める前に、この問題の解決策を長い間探していましたが、解決に役立つものは何も見つかりませんでした。

サーバーに接続し、メッセージを送信して結果を表示する必要があります。とても簡単ですが、クラッシュしてしまい、その理由がわかりません。

ここにコードがあります

private async void startMeasurementButton_Click(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Reading start");
    socket = new StreamSocket();
    var hostName = new HostName("192.168.10.20");
    await socket.ConnectAsync(hostName, "10000");
    dataReader = new DataReader(socket.InputStream);
    dataWriter = new DataWriter(socket.OutputStream);

    dataReader.UnicodeEncoding = UnicodeEncoding.Utf8;
    dataReader.ByteOrder = ByteOrder.LittleEndian;
    dataReader.InputStreamOptions = InputStreamOptions.Partial;
    isReading = true;

    await Task.Run(() =>
    {
        Read();
    });
}

これは問題なく動作し、サーバーに接続され、使用する準備が整いました。そして、2番目の方法はありません

private async Task Read()
{
    while (isReading)
    {
        try
        {
            dataWriter.WriteString("1");
            await dataWriter.StoreAsync(); // <== here an exception occurs
            await dataWriter.FlushAsync();
            dataWriter.DetachStream();
            IAsyncOperation<uint> taskLoad = dataReader.LoadAsync(8196);
            taskLoad.AsTask().Wait();
            uint bytesToRead = taskLoad.GetResults();
            reading1Voltage.Text = bytesToRead.ToString();
        }
        catch (Exception e)
        {
            Debug.WriteLine("Error: " + e.Message);
        }
    }
}

選択した行のコードがクラッシュし、「操作識別子が無効です」がスローされます。LoadAsyncで行ったのと同じことをしようとしました

IAsyncOperation<uint> taskLoad = dataReader.LoadAsync(8196);
taskLoad .AsTask().Wait();

しかし、うまくいきません。reading1Voltageは XAML コントロール、TextBox です。

このコードの何が問題なのですか? どうすれば動作させることができますか?

4

0 に答える 0