日期:2014-05-18  浏览次数:20904 次

这几行代码编译能通过,就是运行崩溃,谁能帮我看看问题出在哪里?
下面的代码,只要我在main函数里调用this.WS(),立即崩溃,为什么?

下面只有三个函数,都是很简单的,

第一个函数,开启一个线程。
第二个函数,就是线程内容,主要是一个循环,去改变背景颜色。
第三个函数,就是一个修改背景颜色的托管。

C# code


        private void WS()
        {
            Thread t = new Thread(new ThreadStart(delegate() { TWS(); }));  //开启一个线程
            t.IsBackground = true; //设置为后台线程
            t.Start();
        }
        public void TWS()
        {
            bool bl = true;
            while (true)
            {
                SolidColorBrush SCB = new SolidColorBrush();
                if (bl==true)
                {
                    bl = false;
                    SCB.Color = Colors.Red;
                }
                else if (bl==false)
                {
                    bl = true;
                    SCB.Color = Colors.Green;
                }
                this.BWCC(SCB);
                Thread.Sleep(500);
            }
        }
        //******修改颜色的委托******
        delegate void BWCC_Handle(SolidColorBrush SCB);
        void BWCC(SolidColorBrush SCB)
        {
            if (this.Dispatcher.Thread != System.Threading.Thread.CurrentThread)
            {
                this.Dispatcher.Invoke(new BWCC_Handle(this.BWCC), SCB);
            }
            else { this.Background = SCB; }
        }





------解决方案--------------------
你在调试时没有收到错误信息?
System.InvalidOperationException
无法使用 DependencyObject,它属于其父 Freezable 之外的其他线程。

SolidColorBrush SCB是在另一线程创建的。