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 也一样,

  • 相关阅读:
    python中的BeautifulSoup使用小结
    python数字前自动补零
    python列表中的所有值转换为字符串,以及列表拼接成一个字符串
    python爬虫requests过程中添加headers
    django+mysql简单总结
    python数字转换为字符串的两种方式
    python自带的IDLE如何清屏
    django模板中的自定义过滤器
    python中的requests使用小结
    在非UI线程中自制Dispatcher
  • 原文地址:https://www.cnblogs.com/yinpengxiang/p/1420156.html
Copyright © 2011-2022 走看看