0

私のコードは、行 label_mytimer.Text = mytimeLeft + " Sec"; でスレッドの無効なクロススレッド アクセスを示しています。デバッグ時は問題ありませんが、通常の実行では問題ありません。マルチクロススレッドアクセスを回避するにはどうすればよいですか。問題は、多くのスレッドが同時にテキストボックスコントロールにアクセスしようとすることです.backgroundworkerが機能する場合の使用方法がわかりません.

private void ttOnTimedEvent(object source, ElapsedEventArgs e)
    {
        if (mytimeLeft > 0)
        {

            // Display the new time left
            // by updating the Time Left label.
            mytimeLeft = mytimeLeft - 1;
            label_mytimer.Text = mytimeLeft + " Sec";//Show time left
        }
        else
        {

            label_mytimer.Text = "OK...";
            mytimeLeft = int.Parse(tBox_rp_Time.Text);

            mycountdownTimer.Stop();
            mycountdownTimer.Enabled = false;

        }
4

1 に答える 1

0

MethodInvoker を使用して GUI スレッドで実行できます

private void ttOnTimedEvent(object source, ElapsedEventArgs e)
{       
    MethodInovker mi = new delegate{
    if (mytimeLeft > 0)
    {
        // Display the new time left
        // by updating the Time Left label.
        mytimeLeft = mytimeLeft - 1;
        label_mytimer.Text = mytimeLeft + " Sec";//Show time left
    }
    else
    {
        label_mytimer.Text = "OK...";
        mytimeLeft = int.Parse(tBox_rp_Time.Text);
        mycountdownTimer.Stop();
        mycountdownTimer.Enabled = false;
    }
    };
    if(InvokeRequired)
       this.Invoke(mi);
 }
于 2013-03-23T15:48:27.390 に答える