“对象目前正在其他地方使用”,锁定代码并不能解决问题。 C#

时间:2015-04-14 06:30:15

标签: c# locking picturebox

哇,请看我的评论。我关于多个间歇性错误的原始问题没有获得任何答案,只有1条评论,也许这对于一个问题来说可能有点过多。所以,我认为最好将其分解为个别问题。

我的主要问题是“对象目前正在其他地方使用”。我在堆栈溢出时已经阅读了很多关于此错误的内容,锁定有问题的代码似乎是解决方案。也许我把它锁定了错误,或者也许还有其他一些问题,但锁定对我不起作用,所以我很欣赏意见。

我的代码旨在更改样本pictureBox的颜色,有几个样本图片框,然后用户可以决定将哪个样本颜色更改以应用于其原始图像。

private object lockObject = new object();    

private void red()
{
        // declare initial variables 
        int xRed = 64;

        // Work around for "Cross-thread operation not valid" error.  This may be a VS issue, not an actual coding error. 
        if (trkColor.InvokeRequired)
            trkColor.Invoke(new MethodInvoker(delegate { xRed = trkColor.Value; }));
        else
            xRed = trkColor.Value;

        // Get bitmap from picturebox
        Bitmap bmp = (Bitmap)pictureBox1.Image;

        lock (lockObject)
        {

        // search through each pixel via x, y coordinates, examine and make changes. Dont let values exceed 255 or fall under 0.  
        for (int y = 0; y < bmp.Height; y++)
            for (int x = 0; x < bmp.Width; x++)
            {
                Color c = bmp.GetPixel(x, y);
                int myRed = c.R, myGreen = c.G, myBlue = c.B;
                myRed += xRed;
                if (myRed > 255)
                    myRed = 255;
                bmp.SetPixel(x, y, Color.FromArgb(255, myRed, myGreen, myBlue));
            }

        // assign the new bitmap to the picturebox
        pictureBox1.Image = (Bitmap)bmp;
        }
}   

0 个答案:

没有答案