###前提・実現したいこと
System.Timers でイベントを発生させて、イベント回数を文字列で表示ささせようとしているのですが、
うまくいかないためアドバイスを頂きたく、
質問させていただきました。
###発生している問題・エラーメッセージ
windows form でのコーディングを今日始めました。
まず、System.Timers でイベントを発生させて、
イベント回数を文字列で表示するところから始めています。
webでいろいろ調べるのですが、文字を表示するには
「テキストボックス」利用するという記述が多く見られましたが、
AccessibilityObjectがリードオンリーのため、
textBox1.Text = counter.ToString();
でエラーになります。
そもそもタイマーイベントに登録したメソッドから、
「テキストボックス」にアクセスしようとしたこと自体が間違いではないか?と考えました。
「windowsフォームとは何か?」を理解することから始める必要があるのかもしれませんが、
今の段階で、そこに時間をかけたくないので、
とっかかりとして、
「System.Timers でイベントを発生させて、イベント回数を文字列で表示する」ことに関して、いい方法を記しているサンプルコードのあるページをご存知の方がいらっしゃいましたら、
アドバイスいただけると助かります。
よろしくお願い致します。
【追記】
コードを追記します。
using System; using System.Timers; using System.Windows.Forms; partial class Form1 { // デフォで作成される Dispose メソッド等は省略 ... private System.Windows.Forms.TextBox textBox1; } public partial class Form1 : Form { private static System.Timers.Timer timer; public Form1() { InitializeComponent(); // タイマーの生成 timer = new System.Timers.Timer(); timer.Elapsed += new ElapsedEventHandler(OnElapsed_TimersTimer); timer.Interval = 5; // タイマーを開始 timer.Start(); return; } public void OnElapsed_TimersTimer(object sender, EventArgs e) { textBox1.Text = "test"; <---------------------------------------------エラー発生。 return; } }
エラー内容
型 'System.InvalidOperationException' の例外が System.Windows.Forms.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした。
追加情報:有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'textBox1' がアクセスされました。
回答1件
あなたの回答
tips
プレビュー