广

ASP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    关于线程的参数、“返回值”、及线程的中止

    2018-04-16 10:58:04 次阅读 稿源:互联网
    零七广告

      关于线程的参数(2.0)、“返回值”、及线程的中止

      
      1.线程的参数:
      有时候会想向辅助线程传递些信息,这里需要用到ParameterizedThreadStart 委托

      示例:

              private void btRunThread_Click(object sender, EventArgs e)

              {

                  Thread t = new Thread(new ParameterizedThreadStart(this.ThreadRun));

                  t.Start(100);

              }

       

              private void ThreadRun(object o)

              {

                  this.lbCompleted.Invoke((MethodInvoker)delegate { this.lbCompleted.Text = System.Convert.ToString(o); });

              }

       

      2.通过代理可以大致实现类似功能,示例:

          class Program

          {

              static void Main(string[] args)

              {

                  ThreadClass tc = new ThreadClass(new MyDlg(DlgMethod));

                  Thread thread = new Thread(new ThreadStart(tc.ThreadRun));

                  Console.WriteLine("second thread start");

                  thread.Start();

                  thread.Join();

                  Console.WriteLine("second thread completed");

                  Console.Read();       

              }

      
              private static void DlgMethod(int i)

              {

                  Console.WriteLine("Second Thread Result:{0}", i);

              }

          }

       

          public delegate void MyDlg(int i);

       

          class ThreadClass

          {

              private MyDlg myDlg;

       

              public ThreadClass(MyDlg pDlg)

              {

                  this.myDlg = pDlg;

              }

       

              public void ThreadRun()

              {

                  int total = 0;

                  for (int i = 0; i < 100; i++)

                  {

                      total += i;

                  }

       

                  if (myDlg != null)

                  {

                      myDlg(total);

                  }

              }

          }

       

      3.线程的中止:

      (1).join方法

      MSDN注释:在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到某个线程终止为止。

      看得一头雾,自己试了一下,似乎线程在调用join方法之后,该线程抢占了所有的cpu时间,直到线程的任务完成。不知道是这是这样?

      (2).abort方法

      立即中止线程

      (3).定义标识量

      示例:

          class Program

          {

              private static bool stop;

              static void Main(string[] args)

              {

                  stop = false;

       

                  Thread t = new Thread(new ThreadStart(ThreadRun));

                  t.Start();

                  Thread.Sleep(100);

                  stop = true;

       

                  Console.Read();

              }

       

              static void ThreadRun()

              {

                  while (!stop)

                  {

                      Console.WriteLine("Do Some Work...");

                  }

              }

          }

      
      http://www.cnblogs.com/KissKnife/archive/2006/10/03/520463.html

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告