async internal static void Generate(this IHtmlTextBlock me)
		{
			var html = me.Html;
			var itemsCtrl = (ItemsControl)me;

			if (string.IsNullOrEmpty(html))
				itemsCtrl.Items.Clear();

			var tb = me as HtmlTextBlock;
			if (tb != null)
				tb.UpdateHeader();

			if (string.IsNullOrEmpty(html))
			{
				if (tb != null)
					tb.UpdateFooter();

				me.CallLoadedEvent();
				return;
			}

			HtmlNode node = null;
			await ThreadPool.RunAsync(o =>
			{
				try
				{
					var parser = new HtmlParser();
					node = parser.Parse(html);
				} catch { }
			});

			if (html == me.Html) 
			{
				if (node != null)
				{
					try
					{
						itemsCtrl.Items.Clear();

						if (tb != null)
							tb.UpdateHeader();

						foreach (var c in node.GetControls(me))
							itemsCtrl.Items.Add(c);

						if (tb != null)
							tb.UpdateFooter();
					} catch { }
				}
				me.CallLoadedEvent();
			}
		}
		internal static void Generate(this IHtmlTextBlock me)
		{
			var html = me.Html;
			var itemsCtrl = (ItemsControl)me;

			if (string.IsNullOrEmpty(html))
				itemsCtrl.Items.Clear();

			var tb = me as HtmlTextBlock;
			if (tb != null)
				tb.UpdateHeader();

			if (string.IsNullOrEmpty(html))
			{
				if (tb != null)
					tb.UpdateFooter();

				Deployment.Current.Dispatcher.BeginInvoke(me.CallLoadedEvent);
				return;
			}

			ThreadPool.QueueUserWorkItem(o =>
			{
			    HtmlNode node = null;
			    try
			    {
			        var parser = new HtmlParser();
			        node = parser.Parse(html);
			    }
			    catch { }

			    Deployment.Current.Dispatcher.BeginInvoke(() =>
			    {
			        if (html == me.Html) // prevent from setting wrong control if html changed fast
			        {
			            if (node != null)
			            {
			                try
			                {
								itemsCtrl.Items.Clear();

								if (tb != null)
									tb.UpdateHeader();

								foreach (var c in node.GetControls(me))
									itemsCtrl.Items.Add(c);

								if (tb != null)
									tb.UpdateFooter();
							}
			                catch { }
			            }

			            Deployment.Current.Dispatcher.BeginInvoke(me.CallLoadedEvent);
			        }
			    });
			});
		}
示例#3
0
        async internal static void Generate(this IHtmlTextBlock me)
        {
            var html = me.Html;
            var itemsCtrl = (ItemsControl)me;

            if (string.IsNullOrEmpty(html))
                itemsCtrl.Items.Clear();

            var tb = me as HtmlTextBlock;
            if (tb != null)
                tb.UpdateHeader();

            if (string.IsNullOrEmpty(html))
            {
                if (tb != null)
                    tb.UpdateFooter();

                if (me is HtmlTextBlock)
                    ((HtmlTextBlock)me).CallHtmlLoaded();
                else
                    ((FixedHtmlTextBlock)me).CallHtmlLoaded();
                return;
            }

            HtmlNode node = null;
#if WP7
            await Task.Factory.StartNew(() =>
#else
            await Task.Run(() =>
#endif
            {
                try
                {
                    var parser = new HtmlParser();
                    node = parser.Parse(html);
                }
                catch { }
            });

            if (html == me.Html)
            {
                if (node != null)
                {
                    try
                    {
                        itemsCtrl.Items.Clear();

                        if (tb != null)
                            tb.UpdateHeader();

                        foreach (var c in node.GetControls(me))
                            itemsCtrl.Items.Add(c);

                        if (tb != null)
                            tb.UpdateFooter();
                    }
                    catch { }
                }

                if (me is HtmlTextBlock)
                    ((HtmlTextBlock)me).CallHtmlLoaded();
                else
                    ((FixedHtmlTextBlock)me).CallHtmlLoaded();
            }
        }