【问题标题】:Why i can't start thread in thread pool?为什么我不能在线程池中启动线程?
【发布时间】:2015-02-15 13:09:49
【问题描述】:

我刚刚创建了线程函数:

static void ThreadMethod {}

试试这个:

ThreadPool.QueueUserWorkItem(ThreadMethod);

但是QueueUserWorkItem 请求WaitCallback 对象。

这只是我书中的一个例子,看起来它必须以这种方式工作。我错过了什么?

【问题讨论】:

  • 你查看过WaitCallback上的文档吗?

标签: c# multithreading threadpool


【解决方案1】:

我觉得是错别字

不是:

static void ThreadMethod {}

但是:

static void ThreadMethod(object sender) {//Method stuff go here}

并称它为,

ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod));

工作的最小案例 + 传递给线程的参数

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            paras myvalues = new paras();

            myvalues.para1 = 10;
            myvalues.para2 = 20;

            ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod),myvalues);


            Console.ReadKey();
        }

        static void ThreadMethod(object state)
        {
            paras vals =(paras) state;

            Console.WriteLine(vals.para1);
            Console.WriteLine(vals.para2);

        }

    }

    struct paras
    {
        int Para1;

        public int para1
        {
            get { return Para1; }
            set { Para1 = value; }
        }

        int Para2;

        public int para2
        {
            get { return Para2; }
            set { Para2 = value; }
        }
    }
}

【讨论】:

  • 我可以用 2 个参数制作 ThreadMethod 吗?我需要输入 2 个 int 值。
  • 在数组或字典中发送多个参数
  • 是的,可以使用结构体 :) 并将其传递给状态对象
  • 谢谢!现在我明白了。
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2015-03-24
  • 2022-01-10
  • 2011-12-16
相关资源
最近更新 更多