🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

1447閲覧

Timer関数の使い方が分かりません。

haru_kandai

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/11/21 06:49

前提・実現したいこと

Visua Studio 2019 C#フォームアプリケーションにて、
PCと測域センサを接続しています。
Timerにより1000ミリ秒に一回、データを取得し表示するプログラムとしたいです。

下記URLを参考につくってみたのですがうまくいきませんでした。
https://takachan.hatenablog.com/entry/2017/09/09/225342

Form1.csのボタンクリック部分のコードを掲載させていただいてます。

どなたか解決策が分かるかた、ご教示いただきたく思います。

発生している問題・エラーメッセージ

エラーは起きていません。しかし、取得した値がテキストボックスへ表示されません。何も表示されない状態です。 Timerを試す前の状態では取得した値が次々と表示できていました。

該当のソースコード

C#

1 private void Button8_Click(object sender, EventArgs e)  //測域センサの開始のボタン 2 { 3 const int GET_NUM = 1520; 4 const int start_step = 0; 5 const int end_step = 760; 6 7 // タイマーの間隔(ミリ秒) 8 var timer = new System.Timers.Timer(1000); 9 10 timer.Elapsed += (sender2, e2) => 11 { 12 try 13 { 14 timer.Stop(); // もしくは timer.Enabled = false; 15 16 17 // 測域センサからデータを取得する処理 18 try// 測域センサからデータを取得する処理 19 { 20 string port_name; 21 int baudrate; 22 port_name = "COM4"; 23 baudrate = 115200; 24 25 26 SerialPort urg = new SerialPort(port_name, baudrate); 27 urg.NewLine = "\n\n"; 28 29 urg.Open(); 30 31 urg.Write(SCIP_Writer.SCIP2()); 32 urg.ReadLine(); // ignore echo back 33 urg.Write(SCIP_Writer.MD(start_step, end_step)); 34 urg.ReadLine(); // ignore echo back 35 36 List<long> distances = new List<long>(); 37 long time_stamp = 0; 38 for (int i = 0; i < GET_NUM; ++i) 39 { 40 string receive_data = urg.ReadLine(); 41 if (!SCIP_Reader.MD(receive_data, ref time_stamp, ref distances)) 42 { 43 textBox1.AppendText(receive_data); 44 break; 45 } 46 if (distances.Count == 0) 47 { 48 textBox1.AppendText(receive_data); 49 continue; 50 } 51 // show distance data 52 textBox1.AppendText(" distance[100] : " + distances[100].ToString()); 53 } 54 55 urg.Write(SCIP_Writer.QT()); // stop measurement mode 56 urg.ReadLine(); // ignore echo back 57 urg.Close(); 58 } 59 catch (Exception ex) 60 { 61 textBox1.AppendText(ex.Message); 62 } 63 finally 64 { 65 textBox1.AppendText("Press any key."); 66 67 } 68 } 69 finally 70 { 71 timer.Start(); // もしくは timer.Enabled = true; 72 } 73 }; 74 75 // タイマーを開始する 76 timer.Start(); 77 78 // タイマーを停止する 79 timer.Stop(); 80 81 // 資源の解放 82 using (timer) { } 83 84 85 86 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/11/21 06:59

先に前の質問を自己解決してください。
YAmaGNZ

2019/11/21 06:59

「うまくいかない」とはどうなるのですか?
YAmaGNZ

2019/11/21 07:00

開始して停止していますが記載ミスですか?
m.ts10806

2019/11/21 08:24

デバッグはされましたか? また「使い方が分からない」だけだと「ドキュメントを見ましょう」というアドバイスだけになりやすいです。 自身で調べたこと試したことを質問本文に追記してください
guest

回答1

0

ベストアンサー

フォームアプリケーションでやってるなら、Timerコンポーネントをフォームに貼り付けて、それを使えば簡単にできますよ


// タイマーを開始する

timer.Start(); // タイマーを停止する timer.Stop();

なんでタイマを開始してすぐ停止してるんですか。これじゃ動くわけ無いですよ
このtimer.Stop(); は削除しときましょう

投稿2019/11/21 06:59

編集2019/11/21 07:06
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/11/21 08:26

using はいいんですか?
y_waiwai

2019/11/21 08:31

なんかするんだろう?かとおもってましたが、なるほど、これもまずいですねー
haru_kandai

2019/11/22 07:50

みなさんご丁寧に回答ありがとうございました。 Timerコンポーネントを用いることにより、動作致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問