gpt4 book ai didi

c# - 使用 tpl 运行方法并更新进度条

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:33 26 4
gpt4 key购买 nike

我有以下类(class):

class MyClass
{
public void timeConsumingCode(){
for(int i=0; i<100; i++)
{
Threading.Thread.Sleep(1000);
}
}
}

然后我有我的 Form1 代码:

private void btn_RunTimeConsumingCode_Click(object sender, EventArgs e)
{
Task loadMasterFile = Task.Factory.StartNew(() =>
{
MyClass myclass = new MyClass();
myClass.timeConsumingCode();
});
}

到目前为止一切正常。但是我在表单上添加了一个进度条,我想根据 i 即的值更新它。如果 i=34 则完成 34%。

我可以调用 timeConsumingCode() 中的进度条属性来更改值,但我希望尽可能将类与表单分开,以便在未来它可以移植到其他应用程序。

有没有一种方法可以更改进度条的值,而不必使 MyClass 依赖于 form1?

我希望我说得足够清楚

最佳答案

.net 4.5 框架中的 TPL 有一个 IProgress<T> 实现为 Progress<T> 的接口(interface).在您的情况下,由于您需要一个数字作为进度报告,因此您可以使用 Progress<int>实例并将事件处理程序附加到其 ProgressChanged事件,沿着这些思路:

private void btn_RunTimeConsumingCode_Click(object sender, EventArgs e)
{
IProgress<int> progress = new Progress<int>(p => {...ui handling code ...});

Task loadMasterFile = Task.Factory.StartNew(() =>
{
MyClass myclass = new MyClass();
myClass.timeConsumingCode(progress);
});
}

加上调用

progress.Report(someNumber);

MyClass.timeConsumingCode 中的适当位置方法。

当然,事件处理程序(此处指定为构造函数参数)是异步调用的。

关于c# - 使用 tpl 运行方法并更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com