我需要使用批量复制复制数百个表。到目前为止,我得到了以下代码。
// 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。我想在线程中链接任务,因为在线程中执行的任务将以一种完成和另一个开始的方式重用相同的进度条。
我在 UI 上绘制了 4 个进度条,bar1、bar2、bar3、bar4。如何将每个进度条与特定线程相关联,以便用户可以同时看到 4 个运行进度?