线程中操作window控件无效!
最近做c/s架构,大部分用到多线程,遇到了在线程执行中无法操作控件,网上搜来一些方法。
定义个委托:
线程执行的代码:
定义个委托:
1
delegate void SetTextCallback(string text);
2![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
线程执行的代码:
1
public void SendAlarm(object state)
2
{
3
string xmlString = XmlStructor.GetTFMXml(ct);
4
if (this.textBox1.InvokeRequired)
5
{
6
SetTextCallback s = new SetTextCallback(setText);
7
this.Invoke(s,xmlString);
8
}
9
msgclass.Send(xmlString);
10
}
操作控件:![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
1
/// <summary>
2
/// 测试
3
/// </summary>
4
/// <param name="x"></param>
5
public void setText(string x)
6
{
7
textBox1.Text += (x + "\r\n\r\n\r\n\r\n");
8
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)