首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

关于ui线程异步方法回调函数ui线程阻塞的有关问题

2012-08-01 
关于ui线程异步方法回调函数ui线程阻塞的问题先贴代码C# codeinternal Image back new Image() { Stretc

关于ui线程异步方法回调函数ui线程阻塞的问题
先贴代码

C# code
internal Image back = new Image() { Stretch = Stretch.Fill }; //当前场景中的背景ServiceReference1.WebServiceSoapClient WSC = new SilverlightChart.ServiceReference1.WebServiceSoapClient();    public MainPage()        {            InitializeComponent();            //this.Width = back.Width = 800;            //this.Height = back.Height = 500;            this.Background = new SolidColorBrush(Colors.Transparent);            Loaded += new RoutedEventHandler(MainPage_Loaded);            this.LayoutRoot.Children.Add(container);            Add(back, -1);        }        public void CallManage()        {        string[] parm =  {"U","I"};                GetData(parm);                            }        /// <summary>        /// Function to create a chart        /// </summary>        public void CreateChart(Object obj)        {        //解决跨线程访问ui对象?            this.Dispatcher.BeginInvoke(delegate            {            JsonObject json = (JsonObject)obj;                        Chart chart = new Chart();                        chart.ZoomingEnabled = true;            chart.ToolBarEnabled = true;            chart.ScrollingEnabled = false;            container.Children.Add(chart);                    Canvas.SetLeft(chart, 5);                    Canvas.SetTop(chart, 0);            });        }        private void GetData(string[] callStr)        {            SilverlightChart.ServiceReference1.ArrayOfString callArray = new SilverlightChart.ServiceReference1.ArrayOfString();            for (int i = 0; i < callStr.Length; i++)            {                callArray.Add(callStr[i]);            }            WSC.ChartCompleted += new EventHandler<SilverlightChart.ServiceReference1.ChartCompletedEventArgs>(WSC_ChartCompleted);            WSC.ChartAsync(callArray);        }        //delegate void AsyncCreatChart(JsonObject obj);        //SynchronizationContext syn;        private void WSC_ChartCompleted(object sender, SilverlightChart.ServiceReference1.ChartCompletedEventArgs e)        {   //异步调用完毕            JsonObject jsonObject = (JsonObject)JsonObject.Parse(e.Result);//e.Result为JSON文本    //这里调用后silverlight出错,是否还是阻塞ui线程,如何处理?            ThreadPool.QueueUserWorkItem(new WaitCallback(CreateChart), jsonObject);        }        void MainPage_Loaded(object sender, RoutedEventArgs e)         {             App myapp = (App)App.Current;            //取得控件            HtmlElement he = HtmlPage.Document.GetElementById("serach");            //为控件注册事件            he.AttachEvent("onclick", (EventHandler)serachHanddle);                        //HtmlPage.Window.Invoke("setFrameHeight", this.Height);        }        //控件事件        void serachHanddle(object sender, EventArgs args)        {            //取得html输入控件            //beginDate = HtmlPage.Document.GetElementById("beginDate").GetProperty("Value").ToString();                        CallManage();        }

上面提问注释部分不太清楚如何处理,如何在不阻塞ui线程的情况下在回调函数中创建一个chart控件
也许有其它方式处理,但是我想应该有解决办法

请赐教,谢谢!

[解决办法]
“调用后silverlight出错”就认真地去调试异常问题本身就行了,不要胡乱猜测。

如果这句注释是别人给你写的,那么你上当了。以后看这个人写的代码要小心,它有可能经常乱写注释。

热点排行