• 締切済み

VS.NET2005 C#にてSerialPort受信されたときのイベントについて質問

Visual Studio.NET2005ProにてSerialPort接続アプリケーションを開発しております。 受信が来たときのイベント DataReceived のところで、受信された文字列をテキストボックスへ表示させるということを行いたいのですが、エラーが出てしまいます。 ちなみにプログラムはこうです。 private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { //シリアルポートからデータを受信するたびに発生する textBox_all_in.Text = (string)serialPort.ReadByte(); } それで、エラーは エラー 1 型 'int' を型 'string' に変換できません。 このように出てしまいました。プログラミング初心者で、つまずいてしまいどうすればよいのかわからなく困っております。アドバイスよろしくお願いします。

みんなの回答

回答No.2

http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html スレッドエラーは、こんな理由だそうです。

参考URL:
http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html
basic01
質問者

補足

書き込みありがとうございます。 textBox_all_in.Text = serialPort.ReadByte().ToString(); これを Invoke(new FocusDelegate(textBox_all_in.Text = serialPort.ReadByte).ToString); に書き換えてみましたが、 型または名前空間名 'FocusDelegate' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています メソッド グループ 'ReadByte' を非デリゲート型 'string' に変換することはできません。このメソッドを呼び出すことはできません。 と、2つエラーが出ました。いろいろ考えて、自分でも調べてみたのですが解決できません・・・ヒントをいただけないでしょうか?

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 シリアルポートの問題ではないね。C#言語の話だ。  textBox_all_in.Text = (string)serialPort.ReadByte();  ↓  textBox_all_in.Text = serialPort.ReadByte().ToString();  これをまず試していただきたい。で、エラーは出なくなるが、おそらく質問者が満足する回答ではないと思う。ReadByte()は、入ってきたデータの8ビット値をintで取るものなので、文字列じゃないわけだ。  それに関してはまた別質問であげた方が良いんじゃないかな。シリアルポートうんぬんの時点で問題の焦点がぼやけてると思う。

basic01
質問者

補足

回答ありがとうございます。 初心者なのでなかなかまだわからないことだらけでした。僕は組み込み用Cしかろくに書いたことがなく文字列を扱うっていうのは初めてなものでしっくりこなくうまく扱いこなすことができませんでした。シリアルポートを扱うことよりもまず先に変数型について理解を深めておかなければならないというのは自覚はしております。 ちなみに、ソースを書き直してビルドしましたが、エラーは出なかったもののデバック中文字を受信すると 有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'textBox_all_in' がアクセスされました。 と出ましたことを報告いたします。

関連するQ&A