progress.report-c# 如何等待一个返回值为void的进度报告事件结束?

问题描述

c# 如何等待一个返回值为void的进度报告事件结束?
需求:progress.Report执行进度报告完成后,再执行其余的代码;
问题:progress.Report的返回值是void,没法用await,怎么等待其结束?

解决方案

答案出来了:

 var task = Task<int>.Run(() => { int i = UpdateResult(dictionaryStockReal[stockCode]); return i; }); //报告一次进度后退出if(task.Result ==1)

其中: UpdateResult就是progress.Report调用的函数。
总结:灵活运行Task,可以完全抛弃MS程式化的IProgress.Report 方法!

解决方案二:
progress是什么类型?不是系统类库的吧。要看你的代码。

解决方案三:
Progress 构造函数 (Action)
我现在的代码是这样的:

 //重置IsUpdated标志 dictionaryStockReal[stockCode].IsUpdated = false;progress.Report(dictionaryStockReal[stockCode]);//确认进度报告已完成,否则死循环---需要找到更好的办法!while (!dictionaryStockReal[stockCode].IsUpdated){ }//后面的代码省略,必须确认进度报告任务已完成,否则后面的操作与进行中的进度报告有冲突。

解决方案四:
Progress 构造函数 (Action)
https://msdn.microsoft.com/zh-cn/library/hh160061(v=vs.110).aspx

解决方案五:
在进度报告调用的事件结尾,设置dictionaryStockReal[stockCode].IsUpdated =true;//dictionaryStockReal为窗体级字典

解决方案六:
Response.End();

解决方案七:
Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,

要想强制突出当前程序要用:System.Environment.Exit(int exitcode)方法;该方法:终止当前进程并为基础操作系统提供指定的退出代码。

如下则问题解决:

private void frmFileDisposal_Closed(object sender System.EventArgs e)

{

System.Environment.Exit(System.Environment.ExitCode);

this.Dispose();

this.Close();

}

解决方案八:
不知能否把进度报告要执行的事件定义为一个task,然后在启动进度报告后,执行task.wait();自己测试下先。。。

解决方案九:
编程是一种美德,是促使一个人不断向上发展的一种原动力。

时间: 2024-12-22 23:23:54

progress.report-c# 如何等待一个返回值为void的进度报告事件结束?的相关文章

java-Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗

问题描述 Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗 Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗 解决方案 可以返回Long对象 比如 return new Long(3); 解决方案二: long是个值类型

JDBC的一个返回值问题

问题描述 假设现在我有一个UPDATE操作是对table1中的数据进行更新,这个时候我有个where约束条件是,这个时候如果我select一次以后,一个都没搜到,那rs.executeUpadte(sql语句)以后,会返回什么值 解决方案 解决方案二:JDBC我也忘了,好久没用JDBC了,随便写点代码测试下就知道了解决方案三:如果语句是正确的话,应该是为零解决方案四:executeUpdate(sql)的返回值是更新的条数.解决方案五:executeUpdate()是返回执行条数的,没有返回执行

怎么才能判断何时有返回值何时void?

问题描述 Stringtest="http://jia@126.com";这里是一个String类型的变量publicvoidfuction(Stringtest){在方法声明中为什么是void没有返回值,为什么不是String我不知道怎么才能判断什么时候使用void题如下编写函数parseMailAddr,解析邮件地址,打印出protocol.username.domainname.publcstaticvoidparseMailUrl(StringmailUrl)例如:mailto

java返回值 重载-java当中一个匿名类或者类必须返回一个对象吗

问题描述 java当中一个匿名类或者类必须返回一个对象吗 java当中一个类必须返回一个对象吗 就象方法一样一定有个返回值,void修饰的除外 解决方案 只有方法才有返回值可言,类又不是方法,没有返回值可言.A a=new A();这叫创建一个对象并引用,而不是返回一个对象

message eceived-怎么样调用mina的messageReceived中得到的返回值

问题描述 怎么样调用mina的messageReceived中得到的返回值 public void messageReceived(IoSession session, Object packet) throws Exception { System.out.println("Received == " + packet.toString()): } mina中有个messageReceived方法,我已经从客户端把消息发送给服务器,也成功收到了服务器返回的数据,但是我现在想在另一个类

Python函数返回值实例分析

  本文实例讲述了Python的函数返回值用法.分享给大家供大家参考.具体分析如下: 最近学一些Python的基本用法,看到定义函数,发现似乎只能返回一个返回值,想想matlab里返回多个返回值多方便啊,网上查了查,看到有返回多个值的方法. python 函数返回值有两种形式: 1 返回一个值. 2 返回多个值. 现看看返回一个值的吧. ? 1 2 3 4 def firstvalue(a,b): c = a + b return c print firstvalue(1,2) #结果:3 再看

(一二四)给类对象赋值、以及类对象的返回值

于直接给对象赋值: 之前学过,如何给对象在初始化时进行赋值. 对于C++11来说,初始化方式有三种: ① man c = man{ "cc",1 }; ② man d = { "dd",1 }; ③ man f{ "ff",1 };   假如有一类M,他有两个私有成员a和b(int类型). 于是新建一对象M q; 对象q使用默认构造函数(假如都赋值为0,这个不重要): 现在,我们想给对象q的第一个私有成员赋值,该怎么办? 这章刚学过运算符重载,难

【整理】为什么在C/C++中总是对malloc的返回值进行强制转换

============= 文章1 ================         首先要说的是,使用 malloc 函数,请包含 stdlib.h(C++ 中可以是 cstdlib),而不是 malloc.h .因为 malloc.h 从来没有在 C 或者 C++ 标准中出现过!因此并非所有编译器都有 malloc.h 这个头文件.但是所有的 C 编译器都应该有 stdlib.h 这个头文件.   在 C++ 中,强制转换 malloc() 的返回值是必须的,否则不能通过编译. 在 C 中,

数据库-sqlserver存储返回值问题

问题描述 sqlserver存储返回值问题 存储中有设定输出参数output,当存储发生异常时,比如插入数据主键冲突,怎么把异常描述传给这个output值, 解决方案 1:在插入之前做判断,然后做插入,写到一个事务中,判断出现异常直接msg返回提示.2:catch捕获异常之后返回系统的异常,然后自己定义一个返回值把系统抛出的异常内容给自己定义的内容中.返回显示.具体操作就看你自己了,一般建议是插入之前判断.