silverlight中“跨线程访问无效”错误

2016-11-25 19:54:33来源:CSDN作者:jiangcsc人点击

silverlight中有时候的数据都是通过异步得到的,当得到需要的数据我们之间操作界面的控件,控件的值时候都会出现”跨线程访问无效。”
自定义线程来获取数据,或者对界面操作时候。这时候 UI 线程和自定义线程不是同一个线程 这样都会报错

解决方法如下

 public partial class ChildWindow1 : ChildWindow    {        System.Threading.Thread t;        public ChildWindow1()        {            InitializeComponent();            this.Loaded += new RoutedEventHandler(ChildWindow1_Loaded);        }        void ChildWindow1_Loaded(object sender, RoutedEventArgs e)        {            t = new System.Threading.Thread(WriteY);            t.Start();        }        private void WriteY()        {            test((o) =>            {                        Dispatcher.BeginInvoke(() =>                              {                                  t = null;                                  CancelButton_Click(null, null);                              });            });        }        private void test(Action<bool> result)        {            if (true)            {                result(true);            }        }        private void OKButton_Click(object sender, RoutedEventArgs e)        {            this.DialogResult = true;        }        private void CancelButton_Click(object sender, RoutedEventArgs e)        {            this.DialogResult = false;        }    }

Dispatcher 维护按优先顺序排列的特定线程的工作项队列。
当 Dispatcher 创建在一个线程,它就会成为唯一 Dispatcher 可与该线程关联即使 Dispatcher 关闭的情况下。
在 WPF, 、 DispatcherObject 只能由访问 Dispatcher 与之关联。 例如,后台线程不能更新的内容 Button 关联 Dispatcher 上 UI 线程。 为了使后台线程访问 Content 属性 Button, ,后台线程必须将工作委托给 Dispatcher 与关联 UI 线程。 这通过使用实现 Invoke 或 BeginInvoke。 Invoke 是同步和 BeginInvoke 是异步的。 该操作将添加到的队列 Dispatcher 指定 DispatcherPriority。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台