这是我的代码:
private void TaskGestioneCartelle()
{
Task.Factory.StartNew(() => GeneraListaCartelle())
.ContinueWith(t => GeneraListaCartelleCompletata()
, CancellationToken.None
, TaskContinuationOptions.None
, TaskScheduler.FromCurrentSynchronizationContext());
}
private void GeneraListaCartelle()
{
// ... code
}
private void GeneraListaCartelleCompletata()
{
Task.Factory.StartNew(() => CopiaCartelle())
.ContinueWith(t => CopiaCartelleCompletato()
, CancellationToken.None
, TaskContinuationOptions.None
, TaskScheduler.FromCurrentSynchronizationContext());
}
private void CopiaCartelle()
{
if (txtLog.InvokeRequired)
{
txtLog.BeginInvoke(new MethodInvoker(delegate { txtLog.AppendText("Copio cartelle in corso..." + Environment.NewLine); }));
}
}
它启动一个线程。完成后,我启动另一个线程(来自Continue with),我尝试在UI上的Control中编写一些东西。但实际上没有任何内容写在txtLog
上。我哪里错了?
答案 0 :(得分:3)
我尝试在UI上的Control中编写一些东西。但事实上没什么 写在txtLog上。我哪里错了?
因为在那时,Invoke不是必需的。您可以修改if语句并添加else
部分,这样做也是如此。
private void CopiaCartelle()
{
if (txtLog.InvokeRequired)
{
txtLog.BeginInvoke(new MethodInvoker(delegate { txtLog.AppendText("Copio cartelle in corso..." + Environment.NewLine); }));
}
else // this part when Invoke is not required.
{
txtLog.AppendText("Copio cartelle in corso..." + Environment.NewLine);
}
}
您可以重构方法的文本追加路径,并从if-else