C#Threads和this.Invalidate()

Van*_*nel 2 c# graphics multithreading winforms

我正在开发一个Windows Mobile应用程序(Compact Framework 2.0 SP1),这个代码让我产生了一个错误:



        public Image Imagen
        {
            get
            {
                return imagen;
            }
            set
            {
                imagen = value;
                this.Invalidate();
            }
        }

代码是从新线程调用的.我试图使用**InvokeRequired来解决:


        public Image Imagen
        {
            get
            {
                return imagen;
            }
            set
            {
                imagen = value;
                if (this.InvokeRequired)
                    this.Invoke(this.Invalidate);
                else
                    this.Invalidate();
            }
        }

但这行.Invoke(this.Invalidate); 不编译.我该如何解决这个问题?第一个错误是您可以与在另一个线程上创建的控件进行交互.

谢谢!

Bor*_*rja 7

Invalidate不需要调用.

invalidate仅包括由主线程处理的paint消息以及其余的待处理消息.但是,当您调用invalidate并且此线程未更改控件时,不会执行绘制,因此您无需使用它进行调用.

如果您需要确保刷新控件,可能无效是不够的,您也需要调用更新.