TimerCallback没有返回值C#

时间:2013-04-22 13:42:20

标签: c# multithreading timer callback return

我使用System.Threading.Timer创建一个计时器,将字符串输出到串行端口,然后每秒从另一个串行端口读取。我试图通过向TimerCallback函数发送参数来做到这一点。下面是我的代码,其中初始化计时器和回调函数的代码。

初​​始化:

TimerCallback tcb = Timer_func(buff_out, send_port, recv_port);
AutoResetEvent autoEvent = new AutoResetEvent(false);
Timer aTimer = new Timer(tcb,autoEvent,1000,1000);

回调功能:

public static TimerCallback Timer_func(string buff_out, SerialPort send_port, SerialPort recv_port)
{
    string buff_in;
    send_port.WriteLine(buff_out);
    buff_in = recv_port.ReadLine();
    Console.WriteLine(buff_in);
}

初始化发生在Main()函数中,两个函数都在同一个类中。

当我按原样编译代码时,我收到错误CS0161:“并非所有代码路径都返回值”。为了解决这个问题,我在该函数的末尾添加了return 1;,但后来我收到错误CS0029:“无法将类型'int'显式转换为'System.Threading.Timer'。

我做错了什么,我该如何解决? (C#新手)提前谢谢!

1 个答案:

答案 0 :(得分:5)

你误解了代表们。

TimerCallback委托类型 - 一种可以保存功能的类型。
TimerCallback只能保存带签名的函数

void MethodName(Object state)

写作时

public static TimerCallback Timer_func(...) { ... }

您刚刚声明了一个返回 TimerCallback代表的函数 因此,您的函数必须返回与TimerCallback匹配的函数。

您可以使用匿名委托执行此操作:

return delegate (object state) {
    string buff_in;
    send_port.WriteLine(buff_out);
    buff_in = recv_port.ReadLine();
    Console.WriteLine(buff_in);
};