スレッド

スレッドの宣言と開始
// 宣言
private Thread _thd;

// スレッドの実行
private void Form1_Load(object sender, EventArgs e)
{
    _thd = new Thread(new ThreadStart(_thdProc));
    _thd.IsBackground = true;
    _thd.Start();
}


スレッド内でのコントロール操作(参考サイト:方法 : Windows フォーム コントロールのスレッド セーフな呼び出しを行う)
// スレッド
private void _thdProc()
{
    while(true)
    {
        // コントロール操作
        this.SetText(DateTime.Now.ToString());

        Thread.Sleep(5);
    }
}

// デリゲート
private delegate void SetTextCallBack(string text);

// コントロール操作用
private void SetText(string text)
{
    if (this.label1.InvokeRequired)
    {
        SetTextCallBack d = new SetTextCallBack(SetText);
        this.Invoke(d, new object[] { text });
    }
    else
    {
        this.label1.Text = text;
    }
}

ラムダ式使用(参考サイト:ひっそりと・とぼとぼと 【C#】スレッド間のコントロール操作について)
private void _thdProc()
{
    while(true)
    {
        // ラムダ式を使用してコントロール操作
        this.Invoke((Action)delegate()
        {
            this.label1.Text = DateTime.Now.ToString();
        });

        Thread.Sleep(5);
    }
}

排他制御

VB.netの SyncLock 〜 End SyncLock
lock(obj)
{

}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます