所以这就是我有一个函数和一个间隔为10毫秒的计时器。
void process()
{
//some heavy processing logic here
}
现在我正在做的是我已将此功能添加到timer.tick delegeate
timer1.tick += process;
当我运行我的程序时,我的异常就是
多个线程开始执行相同的块和'某个地址的指令引用另一个地址。无法读取内存'
但是当我将间隔时间增加到500毫秒时,会在一段时间后抛出此异常。 我是c#的新手,有没有其他有效的方法可以做到这一点而不会遇到这样的错误。
答案 0 :(得分:0)
你开始处理每个计时器滴答,所以一段时间后你的电脑真的会慢下来。这是因为你不控制线程数。而且我假设它们使用相同的资源,因为你没有传递任何参数。这些资源可能不是线程安全的,这会导致异常
答案 1 :(得分:0)
void process()
{
timer1.Enabled=false;
//some heavy processing
timer1.Enabled=true;
}
否则你必须使用信号量。
答案 2 :(得分:0)
现在我意识到在这个函数中我有一些变量正被程序用来正确运行,所以当这个函数被同一个不同的线程多次访问时,它就会出错。 所以我通过使用锁
来防止这种情况void process()
{
lock(frameExtractor) // frame extractor is the variable where frames are stored
// then do some heavy processing
}