0

だからここに私が持っているものと、10ミリ秒の間隔を持つタイマーがあります。

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

今私がやっていることは、この関数を timer.tick delegeate に追加したことです

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 に答える