0

所以这就是我有一个函数和一个间隔为 10 毫秒的计时器。

void process()
{
    //some heavy processing logic here
}

现在我正在做的是我已将此功能添加到 timer.tick 委托

timer1.tick += process;

当我运行我的程序时,我收到异常提示

多个线程开始执行同一块并且“某个地址处的指令引用了另一个地址。无法读取内存”

但是当我将间隔时间增加到 500 毫秒时,会在一段时间后抛出此异常。我对c#有点陌生,有没有其他有效的方法可以做到这一点而不会遇到这样的错误。

4

3 回答 3

0

现在我意识到在这个函数中我有一些变量被程序用来正确运行,所以当这个函数被不同的线程同时访问很多次时,它发生了故障。所以我通过使用锁来防止这种情况

void process()
{
   lock(frameExtractor) // frame extractor is the variable where frames are stored
   //  then do some heavy processing 
}
于 2013-04-28T12:17:42.147 回答
0

计时器在间隔完成后触发。您的函数正在被多个破坏 Context 使用。只要您的 Process 方法的最大运行时间更改计时器间隔并更改为此(在启动功能中禁用计时器并在此之后启用):

void process()
{
timer1.Enabled=false;
//some heavy processing
timer1.Enabled=true;
}

否则你必须使用信号量。

于 2013-04-25T04:38:34.130 回答
0

您开始处理每个计时器滴答声,所以一段时间后您的电脑会真的变慢。这是因为您不控制线程数。此外,我假设它们使用相同的资源,因为您没有传递任何参数。此资源可能不是线程安全的,这会导致异常

于 2013-04-25T04:15:03.297 回答