• Silverlight 线程\跨线程 源码实例


    开发环境:VS 2010 + Silverlight 4

    实例内容:

        运用线程更改界面背景色 

          (当然,这只是一个线程的简单应用,如果只是需要更改背景色其实没必要用线程,完全可以用Time控件之类的实现。但本实例的主要  

         目 的是让大家清楚线程在Silverlight中应用的方法,方便大家以后运用与扩展)

    1.项目结构:

    2.界面UI源码:

    <UserControl x:Class="Thread.MainPage"
        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"
        d:DesignHeight="300" d:DesignWidth="400">
        <Grid x:Name="LayoutRoot" Background="White">
        </Grid>
    </UserControl>

    3.MainPage.xaml.cs 源码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    namespace Thread
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
                LoadEvent();//页面元素加载完成后调用线程
            }
            private void LoadEvent()
            {
                ColorChange change = new ColorChange();
                change.ColorChnagedEvent += new ColorChange.ColorChangeArg(change_ColorChnagedEvent);//订阅颜色更改事件
                change.Start();//线程启动
            }
            /// <summary>
            /// 由于Silverlight中不允许直接跨线程,所以需要利用委托通知界面更改
            /// </summary>
            /// <param name="_color">颜色</param>
            void change_ColorChnagedEvent(Color _color)
            {
                System.Windows.Deployment.Current.Dispatcher.BeginInvoke(new ColorChange.ColorChangeArg(ChangeUIColor), _color);
            }
            /// <summary>
            /// 更改背景颜色
            /// </summary>
            /// <param name="_Color"></param>
            private void ChangeUIColor(Color _Color)
            {
                LayoutRoot.Background = new SolidColorBrush(_Color);
            }
        }
    }

    3.ColorChange.cs 源码

    /**************************************************
    * 文 件 名:ColorChange.cs
    * 所属模块:Thread
    * 文件功能:启动颜色变换,事件通知进行颜色更改
     *
    * 创 建 人:markeluo
    * 创建日期:2011-09-03
    * 修 改 人:
    * 修改日期:
    * 备    注:
    * ************************************************/
    using System;
    using System.Net;
    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 Thread
    {
        /// <summary>
        /// 颜色控制更改类
        /// </summary>
        public class ColorChange
        {
            public delegate void ColorChangeArg(Color _color);//委托
            /// <summary>
            /// 颜色发生了更改
            /// </summary>
            public event ColorChangeArg ColorChnagedEvent;
            /// <summary>
            /// 开始变换颜色
            /// </summary>
            public void Start()
            {
                System.Threading.Thread ColorChangeThread = new System.Threading.Thread(new System.Threading.ThreadStart(ControlColorChange));
                ColorChangeThread.IsBackground = true;
                ColorChangeThread.Start();
            }
            /// <summary>
            /// 变换颜色
            /// </summary>
            private void ControlColorChange()
            {
                for (int i = 1; i < 10; i++)
                {
                    if (i % 2 == 0)
                    {
                        if (ColorChnagedEvent != null)//判断是否被订阅
                        {
                            ColorChnagedEvent(Colors.Blue);//通知颜色发生更改,更改为蓝色
                        }
                    }
                    else
                    {
                        if (ColorChnagedEvent != null)//判断是否被订阅
                        {
                            ColorChnagedEvent(Colors.Red);//通知颜色发生更改,更改为红色
                        }
                    }
                    System.Threading.Thread.Sleep(1000);//暂停1秒
                }
            }
        }
    }

     

     

     

  • 相关阅读:
    反射+javacsv+scv文件构建资源获取
    数据库连接池学习
    标准web架构分层
    Luogu P1850换教室【期望dp】By cellur925
    bzoj1179: [Apio2009]Atm 【缩点+spfa最长路】
    Luogu P3946 ことりのおやつ(小鸟的点心) 【最短路】By cellur925
    Luogu P3393 逃离僵尸岛【最短路】By cellur925
    Luogu P4933 大师【dp】By cellur925
    莫队初探(不带修/例题极少)By cellur925
    分层图初探 By cellur925
  • 原文地址:https://www.cnblogs.com/luowanli/p/2639907.html
Copyright © 2020-2023  润新知