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>
c# thread pause example的更多相关文章
- JVM内存配置详解
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- 如何避免regionServer宕机
为什么regionserver 和Zookeeper的session expired? 可能的原因有 1. 网络不好. 2. Java full GC, 这会block所有的线程.如果时间比较长,也会 ...
- JVM内存配置详解(转)
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- Linux 高性能服务器编程——多线程编程
问题聚焦: 在简单地介绍线程的基本知识之后,主要讨论三个方面的内容: 1 创建线程和结束线程: 2 读取和设置线程属性: 3 线程同步方式:POSIX信号量,互斥锁和条件变量 ...
- Java虚拟机-JVM各种参数配置大全详细
usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...
- 超实用文件监控多线程FTP上传工具
这是自己很久以前写的一个多线程FTP 上传工具,支持多账户,自定义线程数,自定义文件监控目录,可用做文件发布使用,非常实用,今天有小伙伴问起,现分享出来: using System; using Sy ...
- 【UE4 C++ 基础知识】<12> 多线程——FRunnable
概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的 ...
- Worker Thread
http://www.codeproject.com/Articles/552/Using-Worker-Threads Introduction Worker threads are an eleg ...
- boost:thread使用实例
/************************************************************************/ /*功能描述: boost thread使用实例 ...
随机推荐
- SQLServer 事物与索引
SqlServer 事物与索引 分享by:授客 QQ:1033553122 详情点击百度网盘分享链接: SqlServer 事物与索引.ppt
- 【疑难杂症04】EOFException异常详解
最近线上的系统被检测出有错误日志,领导让我检查下问题,我就顺便了解了下这个异常. 了解一个类,当然是先去看他的API,EOFException的API如下: 通过这个API,我们可以得出以下信息: 这 ...
- Linux find查找指定文件 按照名称 然后cp拷贝到指定目录且指定文件名
最近有一个需求,需要将指定目录下的文件(已知文件名)复制到另一个指定的目录且重命名文件. 要求: 在var目录下会定义系统的启动日志相关信息,请查找对应的boot.log文件,并把它备份一份到var/ ...
- [钉钉通知系列]SVN提交后自动推送消息到钉钉群
钉钉设置机器人配置 1.进入配置机器人入口 2.添加机器人 3.测试WebHook请求 本人使用Postman进行测试 4.配置SVN 4.1 配置 Pre-commit hook 设置提交内容必须包 ...
- 使用 Azure PowerShell 模块创建和管理 Windows VM
Azure 虚拟机提供完全可配置的灵活计算环境. 本教程介绍 Azure 虚拟机的基本部署项目,例如选择 VM 大小.选择 VM 映像和部署 VM. 你将学习如何执行以下操作: 创建并连接到 VM 选 ...
- jdk1.8配置环境变量
1. 准备好jdk安装文件,选择地址,假设使用默认地址 2. 安装jdk,此时跳出安装 jre 的地址 3. 等待安装 4.找到安装路径,选择jdk 5. 复制文件夹下的bin 6. 点击我的电脑右键 ...
- UNIX高级环境编程(16)文件系统 < 雨后 >
来点绿色放松一下眼睛吧 :) 文件系统是对文件和目录的组织集合. 一 设备文件 设备文件和系统的某个设备相对应. 设备驱动程序 处理设备的所有IO请求. 提供了一致的API接口,对应于系统调用的ope ...
- 【排序算法】冒泡排序(Bubble Sort)
0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2) 次交 ...
- Python学习---Python环境变量安装问题0907
问题背景: 重新安装操作系统后,原来的环境变量丢失[因Python3.5安装目录是E盘,文件还在,只是丢失了环境变量而已,添加即可] 问题解决: 方法一:使用cmd命令添加path环境变量 在cmd下 ...
- 【转】Linux 高级的视角来查看Linux引导过程
[原文]https://www.toutiao.com/i6594210975480545800/ 1.概述 图 1 是我们在20,000 英尺的高度看到的视图. 当系统首次引导时,或系统被重置时,处 ...