C#中怎么结束一个已经触发了的事件

风一样的大叔 2012-12-22 10:20:32
在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();
}
...全文
619 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
风一样的大叔 2013-01-07
  • 打赏
  • 举报
回复
我将上传照片的线程改为后台的就解决了这个问题,谢谢各位
马少华 2012-12-23
  • 打赏
  • 举报
回复
如果图片已开始上传,只用做一个进度,一个取消就行了吧, 如果你说的长时间没有连接上网络的话,设置超时就行了,一般网络相关的函数都有超时设定的。 线程中传参的例子 Thread t = new Thread(ThreadFun); t.Start(new yourparam()); private void ThreadFun(object param) { yourparam y = param as yourparam; .... }
pig357 2012-12-22
  • 打赏
  • 举报
回复
把name设置为全局静态变量试试
那城 2012-12-22
  • 打赏
  • 举报
回复
你用socket 来做,转换成BYTE就可以啊
风一样的大叔 2012-12-22
  • 打赏
  • 举报
回复
引用 8 楼 qiujialongjjj 的回复:
引用 6 楼 bdmh 的回复:带参数用 ParameterizedThreadStart但是没有几个,咋办呢?版主哥哥
没有这个
风一样的大叔 2012-12-22
  • 打赏
  • 举报
回复
引用 6 楼 bdmh 的回复:
带参数用 ParameterizedThreadStart
但是没有几个,咋办呢?版主哥哥
bigbaldy 2012-12-22
  • 打赏
  • 举报
回复
这样可以不

threadwcf =new Thread(()=>wcfrun(name));
bdmh 2012-12-22
  • 打赏
  • 举报
回复
带参数用 ParameterizedThreadStart
Assassin_ 2012-12-22
  • 打赏
  • 举报
回复
元数据中 你肯定添加不了 哦。。 wince没接触过 。帮顶了!!!
Assassin_ 2012-12-22
  • 打赏
  • 举报
回复
引用 3 楼 qiujialongjjj 的回复:
项目中的元数据中只有: C# code?12345678using System; namespace System.Threading{ // 摘要: // 表示在 System.Threading.Thread 上执行的方法。 public delegate void ThreadStart();} 没有ParameterizedTh……
额。 你环境是wince 。。不好意思。看错了!!!
风一样的大叔 2012-12-22
  • 打赏
  • 举报
回复
项目中的元数据中只有:
using System;

namespace System.Threading
{
    // 摘要:
    //     表示在 System.Threading.Thread 上执行的方法。
    public delegate void ThreadStart();
}
没有ParameterizedThreadStart,可以自己添加吗?
风一样的大叔 2012-12-22
  • 打赏
  • 举报
回复
引用 1 楼 yumen3501 的回复:
大哥!你把Start 转到定义 看一下参数描述 C# code?1234567891011121314151617181920 // // 摘要: // 使操作系统将当前实例的状态更改为 System.Threading.ThreadState.Running,并选择提供包含线程执行的方法要使用的数据的对象。 ……
我转到定义只有:
public void Start();
这边
  threadwcf.Start(name);//这边代码没改,肯定不是这么写的,参数不知道在哪传
Assassin_ 2012-12-22
  • 打赏
  • 举报
回复
大哥!你把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);
yuefeng_sihu 2012-12-22
  • 打赏
  • 举报
回复
带参数用 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(); }

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧