c#

位置:IT落伍者 >> c# >> 浏览文章

C# 跨线程调用TextBox方法浅析


发布日期:2023年04月22日
 
C# 跨线程调用TextBox方法浅析
首先来看下面代码

主线程

delegate void SetTextCallback(string text)

private void SetText(string text)

{

if (thistextBoxInvokeRequired)

{

SetTextCallback d = new SetTextCallback(SetText)

thisInvoke(d new object[] { text })

}

else

{

thistextBoxText = text;

}

}

private void BtnMainThread_Click(object sender EventArgs e) //主线程调用textBox

{

thistextBoxText = Main Thread;

}

子线程

private void BtnNewThread_Click(object sender EventArgs e) //子线程调用textBox

{

thisdemoThread = new Thread(new ThreadStart(thisNewThreadSet))

thisdemoThreadStart()

}

private void NewThreadSet()

{

thisSetText(New Thread

}

首先需要对thistextBoxInvokeRequired返回值的解释

当主线程调用其所在的方法时返回False

当子线程调用其所在的方法时返回True

当单击主线程调用textBox

thistextBoxInvokeRequired的返回值为False

直接执行else的代码textBox中显示Main Thread

当单击子线程调用textBox

thistextBoxInvokeRequired的返回值为True

执行

SetTextCallback d = new SetTextCallback(SetText)

thisInvoke(d new object[] { text })

这两句代码其中Invoke的作用是在拥有控件的基础窗口句柄的线程上用指定的参数列表执行指定委托

a 在拥有控件的基础窗口句柄的线程上就是指主线程

b 指定的参数列表是指的参数text

c 指定委托是指SetText方法

这样就很容易看出

代码执行到Invoke后就会把子线程的参数 New Thread 交给主线程去执行SetText方法此时由于是主线程调用SetText方法所以thistextBoxInvokeRequired的返回值为False直接执行else的代码textBox中显示New Thread               

上一篇:微软发布.Net Framework函数库源码

下一篇:浅析.Net Micro Framework的数据永久存储