在wince中有个上传图片事件,现在有可能无线网络有问题,图片上传需要很久。想做个计时器,如果超过5秒,就报错。用线程来做以上功能,遇到了多线程带参数的问题,网上搜了一大把,不能用,求解public void Route_StartCamareEvent(string name)
       {
            //网上说可以用ParameterizedThreadStart,但是wince下没有这个
            //求这边到底怎么传参数比较好
            threadwcf =new Thread(new ThreadStart(wcfrun);            threadtime = new Thread(new ThreadStart(timerun));
            threadwcf.Start(name);//这边报错,貌似不可以这么用的
            threadtime.Start();
        }        private void timerun()
        {
            for (var i = 3000; i > 0; i--)
            {
                if (i < 100)
                {
                    this.statusBar1.Text = Status.wlanTimeOut;
                    threadwcf.Abort();
                    FTPClient ft = new FTPClient();
                    ft.CopyFiles(Path.PicPath, Path.TemporaryPath);
                    threadtime.Abort();
                    return;
                }
                Thread.Sleep(2);
            }
        }        public void wcfrun(string name)
        {
            picCount.Add(name);
            threadwcf.Abort();
            threadtime.Abort();
        }

解决方案 »

  1.   

    大哥!你把Start 转到定义 看一下参数描述 
            //
            // 摘要:
            //     使操作系统将当前实例的状态更改为 System.Threading.ThreadState.Running,并选择提供包含线程执行的方法要使用的数据的对象。
            //
            // 参数:
            //   parameter:
            //     一个对象,包含线程执行的方法要使用的数据。
            //
            // 异常:
            //   System.Threading.ThreadStateException:
            //     线程已启动。
            //
            //   System.OutOfMemoryException:
            //     没有足够的可用内存来启动此线程。
            //
            //   System.InvalidOperationException:
            //     此线程是使用 System.Threading.ThreadStart 委托(而不是 System.Threading.ParameterizedThreadStart
            //     委托)创建的。
            [SecuritySafeCritical]
            public void Start(object parameter);
      

  2.   

    我转到定义只有:
    public void Start();这边  threadwcf.Start(name);//这边代码没改,肯定不是这么写的,参数不知道在哪传
      

  3.   

    项目中的元数据中只有:
    using System;namespace System.Threading
    {
        // 摘要:
        //     表示在 System.Threading.Thread 上执行的方法。
        public delegate void ThreadStart();
    }没有ParameterizedThreadStart,可以自己添加吗?
      

  4.   

    额。 你环境是wince 。。不好意思。看错了!!!
      

  5.   

    带参数用 ParameterizedThreadStart
      

  6.   

    这样可以不threadwcf =new Thread(()=>wcfrun(name));
      

  7.   

    把name设置为全局静态变量试试
      

  8.   

    带参数用 ParameterizedThreadStart 
            public void wcfrun(string name)   
          {
                 picCount.Add(name);
                 threadwcf.Abort();
                 threadtime.Abort();
             } 

            public void wcfrun(object o)   
          {
                 string name=(string)o;
                 picCount.Add(name);
                 threadwcf.Abort();
                 threadtime.Abort();
             }
      

  9.   

    你用socket  来做,转换成BYTE就可以啊
      

  10.   

    如果图片已开始上传,只用做一个进度,一个取消就行了吧,
    如果你说的长时间没有连接上网络的话,设置超时就行了,一般网络相关的函数都有超时设定的。
    线程中传参的例子
    Thread t = new Thread(ThreadFun);
    t.Start(new yourparam());
    private void ThreadFun(object param)
    {
        yourparam y = param as yourparam;
    ....
    }