繁体   English   中英

TimerCallback不返回值C#

[英]TimerCallback not returning value C#

我正在使用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#的新手)。 先感谢您!

您误会了代表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM