zoukankan      html  css  js  c++  java
  • 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 也一样,

  • 相关阅读:
    【转】mxGraph教程-开发入门指南
    利用IPC通道进行进程间通信(C#)
    C++引用指针 & 构造函数
    MySQL配置主主及主从备份
    MySQL 主从热备份(读写分离)
    SqlServer双机热备技术实践笔记
    c#中的弱引用:WeakReference
    px、em、rem、%、vw、vh、vm这些单位的区别
    深浅clone
    JavaScript-原始值和引用值
  • 原文地址:https://www.cnblogs.com/yinpengxiang/p/1420156.html
Copyright © 2011-2022 走看看