• Silverlight中 非UI线程更新UI 的几种方法


    Silverlight中 非UI线程更新UI 的几种方法:Delegate, AsyncOperation,BackgroundWorker
    首先列一下基础代码:
    <UserControl
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        x:Class="Shareach.TestUI.UCThreadUpdate"
        d:DesignWidth="250" d:DesignHeight="120">
    <StackPanel>
    <TextBlock x:Name="txtCalc" />
    </StackPanel>
    </UserControl>
    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Threading;
    namespace Shareach.TestUI
    {
        public partial class UCThreadUpdate: UserControl
        {
           public UCMsgSend()
           {
                  InitializeComponent();
                  ThreadUpdate();
           }
           void ThreadUpdate()
           {
                 Thread thread = new Thread(new ThreadStart(DoWork));
                  thread.Start();
           }
           void DoWork()
           {
                  int i=0;
                  while(i<100){
                         DoShow(i); 
                  }
           }
        }
    }
    DoShow的三种写法
    1. delegate
    void DoShow(i){
        this.Dispatcher.BeginInvoke(
                                delegate {
                                       txtCalc.Text = string.format(“result “{0}”,i);
                                });
    }
    2.AsyncOperation
    void DoShow(i){
        //这个可以写成成员变量,我这里只是为了好区分
        System.ComponentModel.AsyncOperation asyncOper = System.ComponentModel.AsyncOperationManager.CreateOperation(null);
        asyncOper.Post(result =>
                {
                    txtCalc.Text = string.format(“result “{0}”,i);
                }, null);
    }
    3.BackgroundWorker

    Winform 也一样,

  • 相关阅读:
    冒泡排序(C#实现)
    CLR 学习笔记:程序集加载和反射(3)
    CLR 学习笔记:程序集加载和反射(2)
    CLR 学习笔记:程序集加载和反射(1)
    Effective C#:使用Conditional特性而不是#if条件编译
    Effective C#:推荐使用is或as操作符而不是强制类型转换
    基于线性探测法的散列表
    红黑树-算法四 实现
    二叉树的中序遍历的思想
    二叉树的删除操作-java
  • 原文地址:https://www.cnblogs.com/yinpengxiang/p/1420156.html
Copyright © 2020-2023  润新知