我愿意报告密集任务(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到我的方法,然后尝试订阅它触发的事件。如果我可以得到一些工作代码,我会更新病毒。感谢您的帮助@Jim –