zoukankan      html  css  js  c++  java
  • c# thread pause example

    some times we need pause thread to do some additional job:

    c# thread pause example as below:

    1. create a threadLoader usercontrol

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.IO;
    using System.Net;
    using System.ComponentModel;
    namespace WzlyTool
    {
        /// <summary>
        /// Interaction logic for VideoDownLoader.xaml
        /// </summary>
        public partial class MailMsg : Grid
        {
            bool isBussy = true;  
            public string StrFileName = "";
            BackgroundWorker worker;
            public UserInfo ui;
            bool isTest;
            ResultInfo rt;
    
            public MailMsg()
            {
                InitializeComponent();
            }
    
            public MailMsg(UserInfo ui,bool isTest)
            {
                this.ui = ui;
                this.isTest = isTest;
                InitializeComponent();
                worker = new BackgroundWorker();
                worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                worker.DoWork += new DoWorkEventHandler(worker_DoWork);
                if (!isTest) {
                    BitmapImage b = new BitmapImage(new Uri(ui.picUrl, UriKind.RelativeOrAbsolute));
                    img.Source = b; 
                }
    
    
                worker.RunWorkerAsync();
                //   bindData();
            }
    
    
    
            void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                isBussy = true;
    
                 if (Common.isChangingAccount) {
                    rt = new ResultInfo() { code = 3, isSucc = true, msg = "changing account........" };
                    return;
                
                }
    
                if (isTest)
                {
    
                    rt = new ResultInfo() { code=1, isSucc =true, msg="OK" };
                    if (Common.rnd.Next(1, 9) >4) {
    
                        rt.code = 3;
                        rt. msg = "changing account........";
                        changeAccount();
    
                    }
    
    
                    System.Threading.Thread.Sleep(1000);
                    return;
                }
    
                else
                {
                    if (Common.gMsgType == MsgType.chatMsg)
                    {
                        rt = BLL.SendMsg(ui.uid);
                    }
                    else
                    {
                        rt = BLL.SayHello(ui.uid);
                    }
    
                    if (rt.isSucc)
                    {
                        //save db
                        rt.code = 1;
                        rt.msg = "OK";
    
                    }
                }
    
                isBussy = false ;
                
            }
    
    
            void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
    
                lbLoadStatus.Content = "" + rt.code + "  " + rt.msg ;
                isBussy = false;
                worker = null;
    
            }
    
    
            void changeAccount() {
    
                Common.isChangingAccount = true;
                System.Threading.Thread.Sleep(5000);
                Common.isChangingAccount = false ;
            }
    
    
    
    
    
    
            void testDownload() {
    
                WebClient wc = new WebClient();
                byte[] b = wc.DownloadData("http://v11-tt.ixigua.com/d6daf13754d6d6250d442222be63e361/5b03c8a9/video/m/220c7dadd2606804a9eb1e88835c5f6165f1157546f0000ae2fd17a1f81/");
                Stream fs = File.Create("D:\1.mp4");
                fs.Write(b, 0, b.Length);
                // StreamWriter w = new StreamWriter(fs);
                // w.Write(b);
                fs.Flush();
                fs.Close();
            
            }
    
    
    
        }
    }
    

      

    the data class:

    public class UserInfo
    {
    public string picUrl {get;set; }
    public string uid { get; set; }
    public int age { get; set; }
    public string sex { get; set; }
    public string home { get; set; }
    public string nickname { get; set; }
    public string userDescinfo { get; set; }
    
    }
    
    public class ResultInfo
    {
    
    public int code { get; set; }
    public bool isSucc { get; set; }
    public string msg { get; set; }
    public object retObj { get; set; }
    
    
    }
    

      

    public static class Common
    {

    public static bool isChangingAccount=false ;
    public static Random rnd = new Random();
    public static CookieContainer myCookieContainer = new CookieContainer();
    public static MsgType gMsgType = MsgType.sayHi;

    }


    public enum MsgType {
    sayHi=0, chatMsg=1

    }

    the main window to do:

    BackgroundWorker worker;
    
            bool stopFlag = true ;
            public TestMainWind()
            {
                InitializeComponent();
                Loaded += new RoutedEventHandler(MainWindow_Loaded);
                moreSearshBtnUI1.Hyperlink_Click += new EventHandler(moreSearshBtnUI1_Hyperlink_Click);
                worker = new BackgroundWorker();
                worker.WorkerSupportsCancellation = true;
                worker.DoWork += new DoWorkEventHandler(worker_DoWork);
                worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                worker.WorkerSupportsCancellation = true;
            }
    
    
    
            void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
               
            }
            void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                btnStart.IsEnabled = true ;
                btnStart.Content = "satrt";
    
            }
    
           
            void worker_DoWork(object sender, DoWorkEventArgs e)
            {
    
    
                while (!stopFlag)
                {
    
    
                    System.Threading.Thread.Sleep(1000);
    
                    while (Common.isChangingAccount) { 
    
                       System.Threading.Thread.Sleep(1000);
                
                     }
    
                    Dispatcher.Invoke(new Action (() => { 
                    
                        for (int i = 0; i < myWrapPanel.Children.Count;i++ )
                        {
    
                          //  if(myWrapPanel.Children[i] as 
                        }
                        UserInfo ui = new UserInfo();
                        myWrapPanel.Children.Add(new MailMsg(ui,true));
                        myScrollViewer.ScrollToEnd();
                        lbCnt.Content = "" + myWrapPanel.Children.Count;
    
                    }));
             
    
                }
    
    
    
            }
    

      

    the user control UI:

    <Grid x:Class="WzlyTool.MailMsg"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" Background="White"
           Name="gridRoot"
          Height="200" Width="200" Margin="2" RenderTransformOrigin="0.5,0.5"  Opacity="0">
        <Grid.RenderTransform>
            <ScaleTransform  x:Name="t" ScaleX="1"/>
        </Grid.RenderTransform>
        <Grid.Triggers>
            <EventTrigger  RoutedEvent="Loaded">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation From="0" To="1" Storyboard.TargetName="t" Storyboard.TargetProperty="ScaleX"></DoubleAnimation>
                            <DoubleAnimation From="0" To="1" Storyboard.TargetName="t" Storyboard.TargetProperty="ScaleY"></DoubleAnimation>
                            <DoubleAnimation From="0" To="1" Storyboard.TargetName="gridRoot" Storyboard.TargetProperty="Opacity"></DoubleAnimation>
    
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
    
        </Grid.Triggers>
        <Grid>
            <Rectangle Stroke="Gray"  Fill="WhiteSmoke" StrokeThickness="2"></Rectangle>
            <Image Name="img" Stretch="UniformToFill"/>
            <Label Name="lbLoadStatus" Height="22"></Label>
        </Grid>
    </Grid>
    

      

  • 相关阅读:
    如何学习一项新技术呢?
    开发人员如何构建自己的学习笔记系统
    Stream流之List、Integer[]、int[]相互转化
    图解LinkedHashMap原理
    java 手动实现单链表(尾插法和头插法)
    为什么你学不会递归?刷题几个月,告别递归,谈谈我的经验
    谈谈限流算法的几种实现
    使用LinkedHashMap实现一个简易的LRU缓存
    Java深拷贝和浅拷贝
    Excel两列求差集和并集的实现
  • 原文地址:https://www.cnblogs.com/wgscd/p/9145521.html
Copyright © 2011-2022 走看看