尝试过使用“ParameterizedThreadStart”以及“创建线程实现类”两种方式进行线程参数传递
string型参数可以正常传递
当传递类的实例时总是出问题,请指点一下应该怎样操作,给些方向性的建议也可以,谢谢!

解决方案 »

  1.   

    如果是在3.0下面的话可以用lambda表达式利用闭包来解决线程委托方法含参数的问题
      

  2.   

    private void Proc(object obj)
    {
        List<int> list = (List<int>)obj;
    }// 线程调用List<int> list = new List<int>();Thread thread = new Thread(new ParameterizedThreadStart(Proc));
    thread.Start(list);
      

  3.   


    您好,感谢回复!
    // 线程调用
    List<int> list = new List<int>();
    后面是不是通过Add方法将要传递的类实例添加到list 中然后再传递thread.Start(list)?
    按照上面的方法,进行尝试,跟踪变量出现如下问题麻烦指点一下,谢谢!
      

  4.   

    您好,感谢回复!
    // 线程调用
    List<int> list = new List<int>();
    后面是不是通过Add方法将要传递的类实例添加到list 中然后再传递thread.Start(list)?
    按照上面的方法,进行尝试,跟踪实例对象的相关字段时出现如下提示信息
    “由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值”
    麻烦指点一下,谢谢!
      

  5.   

    是的
    List<int> list = new List<int>();
    list.Add(1);
    list.Add(2);
    list.Add(3);
    list.Add(4);
    list.Add(5);Thread thread = new Thread(new ParameterizedThreadStart(Proc));
    thread.Start(list);
      

  6.   


    您好,我是做的二次开发
    //m_txqFeatureClass是一个组件接口的实例化对象,是最终需传递的参数
    在未启动线程之前,可以查看m_txqFeatureClass各个字段值,
    线程启动后,ExcuteCalculate函数中跟踪实参字段值时显示“由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值”
    代码如下,请帮忙诊断一下,非常感谢!//启用线程
    List<IFeatureClass > txqList = new List<IFeatureClass>();
    txqList.Add(m_txqFeatureClass);
    Thread newThread = new Thread(new ParameterizedThreadStart(ExcuteCalculate));
    newThread.Start(txqList);//ExcuteCalculate函数
    private void ExcuteCalculate(object txq)
    {
           List<IFeatureClass> txqList = (List<IFeatureClass>)txq;
           IFeatureClass txqFeatureClass = txqList[0];       ……}
      

  7.   

    您好,感谢您的回复,我是做的二次开发
    //m_txqFeatureClass是一个组件接口的实例化对象,是最终需传递的参数
    在未启动线程之前,可以查看m_txqFeatureClass各个字段值,
    线程启动后,ExcuteCalculate函数中跟踪实参字段值时显示“由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值”
    代码如下,请帮忙诊断一下,非常感谢!//启用线程
    List<IFeatureClass > txqList = new List<IFeatureClass>();
    txqList.Add(m_txqFeatureClass);
    Thread newThread = new Thread(new ParameterizedThreadStart(ExcuteCalculate));
    newThread.Start(txqList);//ExcuteCalculate函数
    private void ExcuteCalculate(object txq)
    {
      List<IFeatureClass> txqList = (List<IFeatureClass>)txq;
      IFeatureClass txqFeatureClass = txqList[0];  ……}
      

  8.   


    //是这个意思吗?
    void start()
    {
       ThreadStart starter = delegate { dtChanger(dataset1); };//线程带参数
       new Thread(starter).Start();
    }void dtChanger(DataSet dataset1)
    {
        //事件
    }