Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# '无过载;textBox1_TextChanged_1';匹配委托';System.Threading.TimerCallback_C#_Multithreading - Fatal编程技术网

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());
}