当使用螺纹,“调用”被用来避免“跨线程”(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;
}
}
}
哪一个更有效? “之间(1)和(2)”
难道是一个问题,如果我们在“定时器事件”检查之后散射“线程”中处理的数据,而无需使用“调用”或其他方法? (我们听说在打印'线程'内处理的数据时为了避免'跨线程',使用额外的'定时器对象'将数据分散到'定时器事件'中经常被使用,因为它既没有益处也没有害处)。
不确定你的意思。你根本没有在你的代码中使用invoke,你需要它'timer_Tick'和'Work()' – gideon 2012-01-16 07:16:22
'effective'是什么意思? – 2012-01-16 07:17:30
也看看使用SynchronizationContext而不是在这里调用Invoke http://lostechies.com/gabrielschenker/2009/01/23/synchronizing-calls-to-the-ui-in-a-multi-threaded-application/ – sos00 2012-01-16 07:40:20