我有一个C#桌面应用程序。
在我的代码中,我从相机中获取图像。我将此图像传递给例程。
这是'语法'我的代码:
//in a routine
if (!isProcessingMotion)
{
try
{
isProcessingMotion = true;
//do stuff
}
finally
{
isProcessingMotion = false;
}
}
//////
//module variable:
private static bool isProcessingMotion = false;
从父代码中引发事件时会到达该函数。
麻烦的是,'isProcessingMotion = false并不总是被击中'。我已经在整个代码周围放了一个try-catch,但是没有错误。
我不想使用监视器或锁定('只读静态对象'),因为当我执行应用程序时,研究进展缓慢。
我应该注意什么?
答案 0 :(得分:0)
我认为发生的事情不是没有达到finally块,而是在执行finally块之后,不同的线程可能正在更改isProcessingMotion变量。当第二个事件被触发时,可能会发生这种情况,但第一个事件尚未完成处理第一个请求。
似乎您的字段有多个访问权限。 虽然你不想使用锁,但这似乎是解决问题的最佳方法。 或者你必须改变你的应用程序逻辑,不要对同一个变量进行多次读取。
由于你必须按顺序处理它们,我肯定会使用锁:
var processingLock = new object();
if (!isProcessingMotion)
{
lock (processingLock)
{
isProcessingMotion = true;
// Do stuff..
isProcessingMotion = false;
}
}