関連記事
- 【#CSHARP】ソリューション内でサービス,Winformアプリを混在で作成させ,バイナリ出力先を同じにするとサービスが起動しない 【2024年02月08日(木)】
- 【#PHP】謎な #Laravel 案件 引き渡したじ 【2024年01月11日(木)】
- 【C#】謎な改造アプリ,SIMD命令を導入して高速化しようか,思案中 【2023年11月14日(火)】
- Javaの”やらかし”でC#と人気逆転か 激変プログラミング言語人気ランキング 【2023年10月18日(水)】
- 【#CSHARP】次の案件のスケルトン書いてgitサーバに登録するなどと 【2023年05月16日(火)】
ワーカースレッドループ中で
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]
コメント
こどもの日,らしい.城主生誕記念の軍事パレード決行なのかっ!?
今朝,寒いよっ!暑くなったり寒くなったりで自律神経が辛い
グリコ「プッチンプリンやカフェオーレ」目標の5月中旬に出荷再開できず 停止期間を延長決定
【#インボイス】消費税の納付,督促状,らしい...ドロドロドロ 所得税の口座引落登録のみじゃNGっぽい
北海道 根室 軽トラックにヒグマが衝突 乗っていた2人けがなし
火野正平さん、腰痛で撮影中断 NHKBS「にっぽん縦断 こころ旅」 ネットに案ずる声
ゴールデンウィークがスタート 見事な土砂降りワロタ