dte*_*123 1 c# multithreading return timer callback
我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);
Run Code Online (Sandbox Code Playgroud)
回调函数:
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);
}
Run Code Online (Sandbox Code Playgroud)
初始化发生在Main()函数中,两个函数都在同一个类中.
当我按原样编译代码时,我收到错误CS0161:"并非所有代码路径都返回一个值".为了解决这个问题我已经添加return 1;到该函数的末尾,但后来我收到错误CS0029:"无法显式地将类型'int'转换为'System.Threading.Timer'.
我做错了什么,我该如何解决它.(C#新手)先感谢您!
你是对代表的误解.
TimerCallback是委托类型 - 可以保存函数的类型.
TimerCallback只能保存带签名的功能
void MethodName(Object state)
Run Code Online (Sandbox Code Playgroud)
当你写作
public static TimerCallback Timer_func(...) { ... }
Run Code Online (Sandbox Code Playgroud)
你刚才宣布的函数返回一个TimerCallback代表.
因此,您的函数必须返回与TimerCallback匹配的函数.
你可以使用匿名委托来做到这一点:
return delegate (object state) {
string buff_in;
send_port.WriteLine(buff_out);
buff_in = recv_port.ReadLine();
Console.WriteLine(buff_in);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |