C# IProgress<;T>;在.NET4.0中

C# IProgress<;T>;在.NET4.0中,c#,.net-4.0,progress-bar,C#,.net 4.0,Progress Bar,是否有一些旧的.NET 4.0等效接口或类(仅在.NET 4.5中提供)可用于将进度从任务发送到UI 或者我应该为它编写自己的类/接口吗?我的过程实际上有两个部分:接口本身和提供的实现,过程。从技术上讲,该接口甚至不需要跨线程支持,当然在实践中也是这样使用的 在接口中,您可以从.NET4.5的文档中逐字复制。这只是一个声明。但是为了使它有用,您还需要实现它。为此,您需要使用SynchronizationContext来处理ProgressChanged事件或提供给Progress构造函数的处理程

是否有一些旧的.NET 4.0等效接口或类(仅在.NET 4.5中提供)可用于将进度从任务发送到UI


或者我应该为它编写自己的类/接口吗?

我的过程实际上有两个部分:接口本身和提供的实现,
过程。从技术上讲,该接口甚至不需要跨线程支持,当然在实践中也是这样使用的

在接口中,您可以从.NET4.5的文档中逐字复制。这只是一个声明。但是为了使它有用,您还需要实现它。为此,您需要使用
SynchronizationContext
来处理
ProgressChanged
事件或提供给
Progress
构造函数的处理程序的跨线程调用。您可以自己编写整个程序,但我认为从.NET源代码复制/粘贴是合理的:

它是一个相对简单的类,重新实现并不困难,但实际的.NET实现不应该有任何需要其他4.5功能的地方,因此从源代码进行复制/粘贴应该可以


也就是说,请注意,在.NET的早期版本中,实际上以
BackgroundWorker
类的形式提供了等效的功能。这将通常与
IProgress
一起使用的异步执行与允许异步操作报告进度的
ProgressChanged
事件相结合。由于4.5之前只有一个.NET版本还包括TPL支持,通常与
IProgress
一起使用,因此在4.5之前的遗留代码中使用
BackgroundWorker
可能更有意义。

IProgress
实际上有两个部分:接口本身和提供的实现,
进度
。从技术上讲,该接口甚至不需要跨线程支持,当然在实践中也是这样使用的

在接口中,您可以从.NET4.5的文档中逐字复制。这只是一个声明。但是为了使它有用,您还需要实现它。为此,您需要使用
SynchronizationContext
来处理
ProgressChanged
事件或提供给
Progress
构造函数的处理程序的跨线程调用。您可以自己编写整个程序,但我认为从.NET源代码复制/粘贴是合理的:

它是一个相对简单的类,重新实现并不困难,但实际的.NET实现不应该有任何需要其他4.5功能的地方,因此从源代码进行复制/粘贴应该可以


也就是说,请注意,在.NET的早期版本中,实际上以
BackgroundWorker
类的形式提供了等效的功能。这将通常与
IProgress
一起使用的异步执行与允许异步操作报告进度的
ProgressChanged
事件相结合。由于4.5之前只有一个.NET版本还包括TPL支持,通常与
IProgress
一起使用,因此在4.5之前的遗留代码中使用
BackgroundWorker
可能更有意义。

我认为您应该定义自己的接口,只需确保它包含与Net4.5中的IProgress相同的成员/我认为您应该定义自己的接口,只需确保它包含与Net4.5中的IProgress相同的成员/