哪个功能更有效?

KDJ*_*KDJ 4 c# worker-thread winforms

使用线程时,'invoke'用于避免'交叉线程'(1)

但是,有时'计时器对象'被用来避免'CrossThread'(2)

像这样(例如)

public partial class Form1 : Form
{

    private bool bCheckState = false;

    public Form1()
    {
        InitializeComponent();
    }

    //Button Click
    private void btnWork_Click(object sender, EventArgs e)
    {
        Thread m_Thread = new Thread(new ThreadStart(Work));
        m_Thread.Start();

    }

    private void Work()
    {
        bCheckState = true;            
        // not use invoke 
    }


    private void timer_Tick(object sender, EventArgs e)
    {
        if (bCheckState)
        {
            //tbxDisplay is winform's textBox control - printing data
            tbxDisplay.Text = bCheckState.ToString();
            bCheckState = false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪一个更有效?'(1)和(2)之间'


如果我们在"计时器事件"中检查后在"线程"中分散处理的数据,而不使用"调用"或其他方法,是否会出现问题?(我们听说在打印'thread'中处理的数据时要避免'Cross-Thread',在'timer event'中散布带有附加'timer object'的数据经常被使用,因为它既不有益也无害.

Ben*_*igt 5

只需使用一个BackgroundWorker实例并处理已经在正确线程中的ReportProgress和/或RunWorkerCompleted事件.