c# - TimerCallback 不返回值 C#

标签 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# 新手)。提前致谢!

最佳答案

你误解了委托(delegate)。

TimerCallback是一种委托(delegate)类型 – 一种可以包含函数的类型。
TimerCallback 只能保存带有签名的函数

void MethodName(Object state)

当你写作时

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

您刚刚声明了一个返回 TimerCallback 委托(delegate)的函数。
因此,您的函数必须返回一个与 TimerCallback 匹配的函数。

您可以使用匿名委托(delegate)来做到这一点:

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

关于c# - TimerCallback 不返回值 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16148629/

相关文章:

c# - 注销使用 DependencyProperty.RegisterAttached 创建的属性

c# - 我如何抓取所有子游戏对象?

c++ - 错误 : ANSI C++ forbids implicit conversion from `void *' in assignment

spring - Spring多线程与 hibernate

java - 当 A Thread(list.add()) 和 B Thread(list.size()) 工作时,这条线如何工作?

ruby - 在我的 Rails 应用程序中创建计时器

android - Android:在以下位置启动声音

c# - ASP.NET Core Web API - 如何在中间件管道中隐藏 DbContext 事务?

java.util.定时器 : Is it deprecated?

c# - 没有从 Json 反序列化中获取对象数据