C# TimerCallback未返回值C
我正在使用System.Threading.Timer创建一个计时器,它将字符串打印到串行端口,然后每秒从另一个串行端口读取。我试图通过向TimerCallback函数发送参数来实现这一点。下面是我初始化计时器的代码和回调函数的代码 初始化:C# TimerCallback未返回值C,c#,multithreading,timer,callback,return,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 aTim
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);
}
初始化发生在主函数中,两个函数都在同一个类中
当我按原样编译代码时,我收到错误CS0161:并非所有代码路径都返回值。为了解决这个问题,我添加了return1;直到该函数结束,但随后我收到错误CS0029:无法显式地将类型“int”转换为“System.Threading.Timer”
我做错了什么,我怎样才能纠正它。新到C。提前谢谢你 你误解了代表们 是委托类型–可以容纳函数的类型。 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);
};
你误解了代表们 是委托类型–可以容纳函数的类型。 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);
};
你完全不懂这段代码。在任何情况下,您都无法使用计时器使其可靠。你在别的地方有一些代码可以让buff_出局。让该代码也调用SerialPort.WriteLine+ReadLine。你对这段代码完全迷茫了。在任何情况下,您都无法使用计时器使其可靠。你在别的地方有一些代码可以让buff_出局。让该代码也调用SerialPort.WriteLine+ReadLine。委托可以接受比对象状态更多的参数吗?因为send_port、recv_port和buff_out都在main函数中声明,不在委托函数的范围内。@dtemps123:否;计时器不知道该传递什么。相反,直接在Main中声明匿名委托,并去掉函数,它将能够通过闭包访问它们。或者,使它们成为类中的字段。委托可以接受比对象状态更多的参数吗?因为send_port、recv_port和buff_out都在main函数中声明,不在委托函数的范围内。@dtemps123:否;计时器不知道该传递什么。相反,直接在Main中声明匿名委托,并去掉函数,它将能够通过闭包访问它们。或者,在类中创建字段。