锁定C#:奇怪的行为

我以大约30次/秒的速度从相机获取图像,并且在转换图像期间,我想防止相机释放源图像。

在此代码中,bmp是源writeablebitmap图像(相机获取的图像)和目标图像(转换后的图像和显示的图像)

为此,我用了 lock

Messenger.Default.Register<Bitmap>(this, (bmp) =>
{
    ImageTarget.Dispatcher.BeginInvoke((Action)(() =>
    {
        if (ImageTarget.Source == null && bmp != null)
        {
            ImageTarget.Source = writeableBitmap;
        }

        Object tempLock = new Object();
        lock (tempLock)
        {
            Util.ImageConverter.Convert(bmp, writeableBitmap);
        }
     }));
});

这种方法似乎可行,但是它的性能确实很差(因为新的30次/秒)。我在https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx上看到可以使用的相同实例tempLock

所以我的代码部分变成:

Object tempLock = new Object();

Messenger.Default.Register<Bitmap>(this, (bmp) =>
{
    ImageTarget.Dispatcher.BeginInvoke((Action)(() =>
    {
        if (ImageTarget.Source == null && bmp != null)
        {
            ImageTarget.Source = writeableBitmap;
        }


        lock (tempLock)
        {
            Util.ImageConverter.Convert(bmp, writeableBitmap);
        }
     }));
});

问题在于writeableBitmap始终为黑色。

为什么我做得不好?

谢谢

编辑:我找到了一个解决方案,我把Object tempLock = new Object();外部构造函数(直接在类中,它的工作,但我不知道为什么)

帕斯·沙(Parth Shah)

当您将Object tempLock = new Object();构造函数放在外部时,您只需要在主线程中初始化一次即可。但是,当您将其放入其中时,您将ImageTarget.Dispatcher.BeginInvoke()在后台线程上对其进行初始化。因此,tempLock的值在主线程上保持为空,并且不可能锁定为空值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#对象修改:奇怪的行为

来自分类Dev

C#和C ++中反向循环的奇怪行为

来自分类Dev

奇怪的C#平台调用/ DLLImport行为

来自分类Dev

C ++ io的奇怪行为

来自分类Dev

在C#中执行多线程活动的奇怪行为

来自分类Dev

C#中奇怪的COM对象行为

来自分类Dev

C#中奇怪的Regex行为

来自分类Dev

多线程行为奇怪的C#!

来自分类Dev

C#中带有联合的奇怪解组行为

来自分类Dev

实现通用接口时奇怪的C#行为

来自分类Dev

奇怪的BeginInvoke行为C#

来自分类Dev

C#中左移的奇怪行为

来自分类Dev

C ++ OstringStream奇怪的行为

来自分类Dev

VS C#调试器中看似奇怪的行为

来自分类Dev

如果C#中的锁定具有类似RAII的行为?

来自分类Dev

C ++奇怪的数组行为

来自分类Dev

C#对象修改:奇怪的行为

来自分类Dev

C#中奇怪的委托行为

来自分类Dev

C#奇怪的字符串行为?

来自分类Dev

C ++ io的奇怪行为

来自分类Dev

在C#中执行多线程活动的奇怪行为

来自分类Dev

C#下载奇怪的行为

来自分类Dev

C#数组和Random.NextDouble()的奇怪行为

来自分类Dev

C#中带有联合的奇怪解组行为

来自分类Dev

C#字典的奇怪行为

来自分类Dev

奇怪的运动行为Unity2D C#

来自分类Dev

VS C#调试器中看似奇怪的行为

来自分类Dev

C# 奇怪的程序集行为

来自分类Dev

C# 在文件中写入文本的非常奇怪的行为