負荷の高いタスク (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();
}
}
これを達成するための興味深いテスト済みのより良い方法はありますか? このアプローチは私にとってはうまくいっているので、環境によっては安全に使用できない可能性があります。