関連記事
- 【#PostgreSQL】テーブルから取得したレコードセットをCSVへ落とそうとすると,空ファイルが出来る...ドロドロドロ 【2023年03月08日(水)】
- 【#git】TortiseGit ver2.14のGitWCRev.exeを動かすとErrorCD:10を出力して,動かない 【2023年02月08日(水)】
- 【#Excel】Excel-COMを叩くアプリの改造,オワタ 【2023年01月18日(水)】
- 【#CSHARP】System.Numerics.Vectorでグリングリン,AVXレジスタをぶん回したい 【2023年01月14日(土)】
- 【#PostgreSQL】鬼のような4本のSQLを書き上げた 【2023年01月13日(金)】
ワーカースレッドループ中で
Windowsフォームのコントロールのプロパティをいじくると
たとえば、ラベルのTextプロパティに文字を突っ込んだり
有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール ‘label1’ がアクセスされました。 |
Windowsコントロールのプロパティ操作や、メソッド呼び出しは
主スレッド行うのが原則で
他のスレッドからの、操作は動作保証しない感じ
でも、やっぱり、ワーカースレッドから
コントロールのプロパティ、いじりたいと思うのは、人情
そのときは、Control.Invokeメソッドを使うことにより
スレッド間の処理調停をうまい具合にやってくれます
サンプルは以下のように…
今回は、スレッドタイマークラスを使ってみました
public partial class Form1 : Form
{
private System.Threading.Timer m_tmr; //スレッドタイマ
private bool fl = true; //スレッド管理フラグ
public Form1()
{
InitializeComponent();
TimerCallback timerDelegate = new TimerCallback(TmrLabelText); //スレッドタイマのインスタンス生成
m_tmr = new System.Threading.Timer(timerDelegate, null , 0, 50);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
fl = false; //後始末
for(int i = 0; i < 100; i++) //イベントが貯まっている可能性があるので
{
Application.DoEvents();
Thread.Sleep(1);
}
}
//---------------------------------------------
//スレッドタイマを利用したテキストの文字列代入
//
//---------------------------------------------
public void TmrLabelText(object o)
{
if (fl == true)
{
MySetControlText(label1, "aaa"); //デリゲート本体を呼び出す
}
}
//-------------------------------------------
//ラベル向け文字列セットデリゲート
//
//-------------------------------------------
private void MySetControlText(Label l, string t)
{
if (l.InvokeRequired == true)
{
deli_MySetControlText d = new deli_MySetControlText(MySetControlText);
this.Invoke(d, new object[] {l, t});
}
else
{
l.Text = t;
}
}
delegate void deli_MySetControlText(Label l, string t); //デリゲート型の定義
}
[/csharp]
コメント
【#WBC2023】村上の逆転サヨナラ打で3大会ぶりの決勝進出
【#桜】宮崎~国富:大坪の一本桜にて春を満喫してきた(23/3/18)
【速報】ガーシー前議員「引っ越しする」 警視庁が逮捕状請求
今日は東日本大震災12年(23/3/11)
【#WBC2023】1次ラウンド 日本 8-1 中国 大谷翔平さんが凄かった
【#電気代】23年2月分の電気代,安すぎワロタ Ryzen7 7700xに変えてから目に見えて電気使用量が減ってる件
【H3】初号機 今月6日に改めて打ち上げの方向で調整 JAXA(23/3/3)
【#WBC2023】大谷翔平『小型飛行機』で名古屋入り