C# '无过载;textBox1_TextChanged_1';匹配委托';System.Threading.TimerCallback
我想使用C# '无过载;textBox1_TextChanged_1';匹配委托';System.Threading.TimerCallback,c#,multithreading,C#,Multithreading,我想使用System.Threading.Timer,这样我就可以使用这个定时器调用方法“CreateThread”,如下所示 public void CreateThread() { th1 = new Thread(ChangeLabel); th1.Start(); } 我在第行遇到错误: public void textBox1_TextChanged_1(object sender, EventArgs e) {
System.Threading.Timer
,这样我就可以使用这个定时器调用方法“CreateThread
”,如下所示
public void CreateThread()
{
th1 = new Thread(ChangeLabel);
th1.Start();
}
我在第行遇到错误:
public void textBox1_TextChanged_1(object sender, EventArgs e)
{
TimerCallback tcb = new TimerCallback(CreateThread); //This line is showing error
}
谁能解释一下是什么问题吗 问题是您的方法签名与委托不匹配。它接受对象作为参数,但您的方法不接受任何内容。TimerCallback需要委托中的
状态属性:
public void CreateThread(object state)
{
th1 = new Thread(ChangeLabel);
th1.Start();
}
:
如果查看TimerCallback
委托的签名,您将看到它的签名为void TimerCallback(object)
您希望计时器调用的方法需要相同的签名,以便进行编译
像这样的东西可以解决这个问题:
public void CreateThread()
{
CreateThread(null);
}
private void CreateThread(object state)
{
th1 = new Thread(ChangeLabel);
th1.Start();
}
这将允许CreateThread()
的任何现有调用方保持不变,同时为您提供一个具有正确签名的方法来调用该方法
或者,可以使用lambda执行以下操作:
public void textBox1_TextChanged_1(object sender, EventArgs e)
{
TimerCallback tcb = new TimerCallback(() => CreateThread());
}
public void textBox1_TextChanged_1(object sender, EventArgs e)
{
TimerCallback tcb = new TimerCallback(() => CreateThread());
}