为了尝试深入了解线程,我尝试了猴子看猴子,并在MSDN上从THIS_PAGE复制(如读取和输入,而不是剪切和粘贴)。
当我这样做时,我收到以下错误
错误2找不到类型或命名空间名称'SetTextCallback'(您是否缺少using指令或程序集引用?)Form1.cs 385 17 ZYX987
错误3找不到类型或命名空间名称'SetTextCallback'(您是否缺少using指令或程序集引用?)Form1.cs 385 41 ZYX987
我在网页上向下滚动,发现很多社区评论表明每个人都有完全相同的问题,因为这个例子具有误导性。即,SetTextCallback
永远不会被宣布。
这是我在盯着MSDN页面时输入的模仿版本......
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of
// the calling thread to the thread ID of the
// creating thread. If these threads are different,
// it returns true
if (this.label1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.label1.Text = text;
}
}
请有人在这里建议我应该将SetTextCallback
放在我的CopyCatCode中吗?
第二个问题:声明它的语法是什么样的?
第三个问题:如果SetTextCallback
是一种方法,那么它应该包含哪些内容?
我在Stack Overflow上搜索了“... SetTextCallback ...”(没有引号)并找到了一些引用,但不是这个确切的问题。希望这是属于这里的问题。谢谢你的阅读。
答案 0 :(得分:10)
在您链接到的msdn页面(“How to: Make Thread-Safe Calls to Windows Forms Controls”)中向下滚动,完整的源代码列在底部。你会在那里找到定义:
// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void SetTextCallback(string text);
答案 1 :(得分:3)
SetTextCallback只是一个委托,其签名与委托方法相同。
像:
public delegate void SetTextCallback(string message);
您也可以从this tutorial
中受益答案 2 :(得分:3)
请看这个完整的例子:
// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void SetTextCallback(string text);
答案 3 :(得分:2)
我有同样的问题,这是我的解决方案
我正在阅读带有datareceived的串口,只需要把文本收到文本框,我就这样做了:
public void puerto_serie_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
string a = this.puerto_serie.ReadLine().Trim();
leer(a);
}
delegate void SetTextCallback(string text);
void leer(String b)
{
if (valores.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(leer);
this.Invoke(d, new object[] { b });
}
else
{
valores.Text += this.puerto_serie.ReadLine().Trim()+"\n";
}
}