bulkcopy を使用して数百のテーブルをコピーする必要があります。これまでのところ、次のコードを取得しました。
// from UI main thread
private void test1()
{
LimitedTaskScheduler scheduler = new LimitedTaskScheduler(4);
TaskFactory factory = new TaskFactory(scheduler);
foreach (DataRow row in tabList.Rows) // Loop over the rows.
{
string tabName = row[tabList.Columns["TableName"]].ToString();
factory.StartNew<string>( () =>
{
Console.WriteLine("{0} on thread {1}", tabName, Thread.CurrentThread.ManagedThreadId);
TableCopyer tc1 = new TableCopyer();
// pass progressbar and label into tc1 instance to update the progressbar and label
tc1.Bar1 = bar1;
tc1.L1 = l1;
tc1.EntityCopy(AppInfo.SrcDBMSPath, AppInfo.DestDBMSPath, tabName, "");
return tabName;
});
}
}
// inside TableCopier class
private void OnSqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
{
try
{
int rowCopied = int.Parse(e.RowsCopied.ToString());
double result = (double.Parse(rowCopied.ToString()) / double.Parse(TotalRows.ToString()));
int prsent = int.Parse(Math.Round((result * 100), 0).ToString());
SetProgressbar(prsent);
}
catch { throw; }
}
LimitedTaskScheduler はhttp://msdn.microsoft.com/en-us/library/ee789351.aspxから来ています
私の質問は
各スレッド内の前のタスクが終了したときにのみ開始されるように、タスクをチェーンするにはどうすればよいですか? 最大並列スレッドを 4 に制限しました。スレッド内で実行されるタスクは、1 つの終了と別の開始の方法で同じプログレスバーを再利用するため、スレッド内でタスクを連鎖させたいと考えています。
UI、bar1、bar2、bar3、bar4 に 4 つのプログレス バーが描画されています。各プログレスバーを特定のスレッドに関連付けて、ユーザーが同時に 4 つの進行状況を確認できるようにするにはどうすればよいですか?