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>

  

猜你喜欢

转载自www.cnblogs.com/wgscd/p/9145521.html