gpt4 book ai didi

c# - 使用阶段优先方法报告线程进度

转载 作者:行者123 更新时间:2023-12-03 13:20:26 25 4
gpt4 key购买 nike

我愿意报告密集任务(I/O)的进度。我已经阅读了所有方法,界面,backGroundWorker,Progress,但是没有人像任务的当前阶段那样包含任何其他信息。所以我写了这种方法,如果您能给我任何反馈,建议或意见,我将很高兴。我正在一个winforms 4.0项目中工作。

这是任务

   class _ThreadTest
{
public static void ReporteProgreso(out int p, out string stage)
{
p = 0;
stage = "";
for (int i = 0; i < 10; i++)
{

System.Threading.Thread.Sleep(500);
p++;

switch (p)
{
case 0: stage = "init"; break;
case 1: stage = "Loading Data"; break;
case 2: stage = "Parsing Data"; break;
case 3: stage = "Checking"; break;
case 4: stage = "Inserting n Records"; break;
case 5: stage = "10%"; break;
case 6: stage = "50%"; break;
case 7: stage = "70%"; break;
case 8: stage = "100%"; break;
case 9: stage = "finish"; break;

default:
break;
}
}

}
}

这就是我的称呼
  static void Main()
{

//Reportar progreson con OUT
int p = 0;
string stage = "";
_ThreadTest t = new _ThreadTest();
Thread oThread = new Thread( () => _ThreadTest.ReporteProgreso(out p,out stage) ) ;
oThread.Start();

int tmp = 0;
while (oThread.IsAlive)
{

if (tmp != p)
{
Console.WriteLine(stage);
tmp = p;
}
}

Console.ReadKey();

}
}

有没有有趣的经过测试的更好的方法来实现这一目标?由于此方法对我有用,因此在某些类型的环境中使用它可能并不安全。

最佳答案

BackgroundWorker.ReportProgress完全可以满足您的需求。第二个参数是一个对象,其中包含您的自定义进度报告。

第二个参数位于传递给UserState事件处理程序的ProgressChangedEventArgsProgressChanged属性中。

BackgroundWorker MSDN主题有一个很好的例子。该示例中唯一缺少的是如何使用UserState。这是一个对象,因此您需要对其进行转换。因此,如果您的ReportProgress调用为:

ReportProgress(1, "Loading data");

然后在 ProgressChanged事件处理程序中,将其转换回字符串:
// This event handler updates the progress. 
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
resultLabel.Text = (string)e.UserState
}

关于c# - 使用阶段优先方法报告线程进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372821/

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