当前位置: 首页 > news >正文

牡丹江市建设局网站查询域名备案

牡丹江市建设局网站,查询域名备案,近期热点舆情事件,网站回答问题app怎么做最近几周一直在做DotNET WinForm开发#xff0c;陆陆续续有些收获#xff0c;希望能够有空好好整理整理。记下来以免以后又忘了。:-) 一、最简单的线程使用方法 新建一个C# Windows应用程序项目#xff0c;在最前面的引用代码那增加一行using System.Threading;在界面上扔个…最近几周一直在做DotNET WinForm开发陆陆续续有些收获希望能够有空好好整理整理。记下来以免以后又忘了。:-)   一、最简单的线程使用方法 新建一个C# Windows应用程序项目在最前面的引用代码那增加一行using System.Threading;在界面上扔个Button和Label再写几行简单的代码就是一个最简单的线程例子啦private void button1_Click(object sender, System.EventArgs e){ Thread t new Thread(new ThreadStart(myRun)); t.Start();} private void myRun(){ for(int i0; i1000000; i) {  if (i % 1000 0)    label1.Text i.ToString(); }} 当然这个例子没有处理线程之间同步之类关系。你试试快速点几下Button就知道有什么好玩的事情发生了。 二、给线程传递参数  ThreadStart 委托没有参数也没有返回值。其声明为 public delegate void ThreadStart();所以不能直接给线程传递参数。但是我们可以把线程函数封装到一个类里给类的实例传递参数可以在创建实例时也可以用另外的函数来传递。这不是重点。因为DotNET自由线程的特点在线程中是可以访问同一个类里的数据的。我们更改上面的简单例子尝试给线程传递一个循环的终止值。首先是弄个类把 myRun 函数装进去 :-) 注意要公开函数(public) public class myThreadClass {  private int Max 0;  public myThreadClass(int initValue)  {   Max initValue;  }   public void myRun()  {   for(int i0; i   {    if (i % 1000 0)      label1.Text i.ToString();   }  } }然后Button事件有点小改动如下myThreadClass myThread new myThreadClass(800000);Thread t new Thread(new ThreadStart(myThread.myRun));t.Start();仅仅是多了一行很简单是吧 编译出错啦找不到类型或命名空间名称label1注意到我们原来是直接在Form实例中使用label1现在将myRun装到另外的类里当然不能直接访问label1啦。怎么办一样弄成个参数传给myThreadClass就行。修改后的程序如下 public class myThreadClass {  private int Max 0;  object obj null;   public myThreadClass(int initValue, object initObj)  {   Max initValue;   obj initObj;  }   public void myRun()  {   for(int i0; i   {    if (i % 1000 0)      if (obj ! null)       (obj as Label).Text i.ToString();   }  } }下面是Form1中的按钮事件  private void button1_Click(object sender, System.EventArgs e)  {   myThreadClass myThread new myThreadClass(800000, label1);   Thread t new Thread(new ThreadStart(myThread.myRun));   t.Start();  }好了运行下看看是不是和原来的效果一模一样。差别在于调用线程的时候你可以传递参数把握线程的运行时间。 三、获得线程的返回值 第二部分解决了线程参数的问题这部分我们来解决返回值的问题。我们注意到第二部分的代码会把线程的中间运行状态的值写到Form1的label1.Text中那么我们能不能从这里动手脚呢试试看。往Form1上扔个进度条ProgressBar先myThreadClass我们暂时先不动只改Button事件  private void button1_Click(object sender, System.EventArgs e)  {   const int Max 800001;   progressBar1.Maximum Max;   progressBar1.Value 0;   myThreadClass myThread new myThreadClass(Max, label1);   Thread t new Thread(new ThreadStart(myThread.myRun));   t.Start();   while ( t.IsAlive )   {    progressBar1.Value Int32.Parse(label1.Text.ToString());    progressBar1.Refresh();    Thread.Sleep(0);   }  }运行一下结果是不行窗体完全失控了。如图 分析下原因。很显然是那个while搞的鬼让窗体主线程在这里不停的循环、执行。根本没有多余的力气来更新窗体界面显示啦 此路不通那怎么办好呢答案就是 回调函数。首先声明一个回调函数原型在我们这个例子中只需要取得一个返回值所以回调函数的参数只有一个如果有更多返回值可相应修改。namespace TestThread{ public delegate void ThreadCallback(int i);   public class Form1 : System.Windows.Forms.Form 然后修改myThreadClass类不再需要传递label1给线程了。因为我们将在回调函数中获得线程当前循环的值然后由回调函数自个来更新label1.Text同时还要更新progressBar1。但要传递给线程的参数扔是两个一个是initValue用来控制循环的一个是ThreadCallback callbackDelegate即回调函数。修改后的myThreadClass类代码如下 public class myThreadClass {  private int Max 0;  private ThreadCallback callback;   public myThreadClass(int initValue, ThreadCallback callbackDelegate)  {   Max initValue;   callback callbackDelegate;  }   public void myRun()  {   for(int i0; i   {    if (i % 1000 0)      if (callback ! null)       callback(i);   }  } } 回到Form1先写个回调函数ThreadCallback 的具体实现  public void myCallback(int i)   {   label1.Text i.ToString();   label1.Refresh();   progressBar1.Value i;   progressBar1.Refresh();  }接着修改Button事件  private void button1_Click(object sender, System.EventArgs e)  {   const int Max 800001;   progressBar1.Maximum Max;   progressBar1.Value 0;   myThreadClass myThread new myThreadClass(Max, new ThreadCallback(myCallback));   Thread t new Thread(new ThreadStart(myThread.myRun));   t.Start();  }代码中通过new ThreadCallback(myCallback)给线程传了回调函数。 OK改动都不算多。我们运行下看看吧一切顺利如图 label1和progressBar1同步更新状态。而且在线程运行时拖动主窗体也不会失去控制了没有任何问题。 后文 本文是《DotNET多线程使用初探》故不是详细的DotNET多线程使用说明。多线程还有很多其它方面如生存期、线程间同步、死锁问题、STA、MTA、线程池等等等等。本文起源于我在DotNET开发中处理一些复杂的数据库操作非常耗时主窗体经常失去反应。这时就需要一些简单的线程操作。很必要的一个是给用户一个进度条。如果你遇到的情况跟我相似相信本文对你会有所帮助。  转载于:https://www.cnblogs.com/CrazyWill/archive/2005/08/25/222579.html
http://www.pierceye.com/news/651050/

相关文章:

  • 永久免费的cad软件seo咨询
  • 网站邮件功能设计理论网站排名软件包年
  • wordpress语言文件编辑专业的企业网站优化公司
  • 正定网站建设制作公司wordpress去掉模板登录
  • 定制开发一个网站多少钱网站开发项目的心得体会
  • 网站被做跳转怎么办个人网站开发软件
  • 湛江网站制作费用南昌建站系统外包
  • 杭州市住房和城乡建设厅网站网页设计个人网站作业
  • 钦州建站哪家好杭州网站建站平台
  • 程序员做笔记的网站在线简历制作系统
  • 有一个网站自己做链接获取朋友位置wordpress504
  • 设计感 网站wordpress企业内网主题
  • 金塔精神文明建设网站上线了小程序制作平台
  • 东莞阳光网站建设成效网站内容营销
  • 阿里云做网站吗深圳香蜜湖街道
  • 营销型网站名词解释关键词有几种类型
  • 高端网站建设浩森宇特Php做网站要求
  • 盐田高端网站建设湖南网站seo营销多少费用
  • 福州建设招聘信息网站东莞房价将暴跌
  • 外包做网站的要求怎么写网站建设调查分析
  • 北京网站建设公司哪个最好鲜花网页设计模板
  • 汕头网站制作方法江苏网站设计公司
  • 免费1级做看网站上海策朋网站设计公司
  • 自贡做网站的公司wordpress网站加密码
  • 长春建设网站公司哪家好学校网站建设实施方案
  • 邯郸网站优化怎么用建设通网站会员共享密码
  • 怎么使自己做的网站有音乐简易 建站
  • 如何做免费网站制作郑州网站建设搜索优化
  • 北京网站制作17页谈谈对seo的理解
  • 西安专业建网站网站可信度必须做吗