如何同时启动两个foreach循环c#wpf
是否可以在两个标签中同时使用字符逐个显示字符串 两个不同的Dispatcher.BeginInvoke(新操作(()) 我有两个这样的foreach循环:如何同时启动两个foreach循环c#wpf,c#,wpf,C#,Wpf,是否可以在两个标签中同时使用字符逐个显示字符串 两个不同的Dispatcher.BeginInvoke(新操作(()) 我有两个这样的foreach循环: string str1 = "NUMBER OF PASSED:" + "\t\t" + passed1.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed1.ToString(); foreach (var ch1 i
string str1 = "NUMBER OF PASSED:" + "\t\t" + passed1.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed1.ToString();
foreach (var ch1 in str1)
{
var char_by_char1 = ch1;
Dispatcher.BeginInvoke(new Action(() =>
{
first_result.Content += char_by_char1.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
string str2 = "NUMBER OF PASSED:" + "\t\t" + passed2.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed2.ToString();
foreach (var ch2 in str2)
{
var char_by_char2 = ch2;
Dispatcher.BeginInvoke(new Action(() =>
{
second_result.Content += char_by_char2.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
var dispatcherObj = Dispatcher.CurrentDispatcher;
string str1 = "NUMBER OF PASSED:" + "\t\t" + passed1.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed1.ToString();
var tsk1 = Task.Factory.StartNew(()=>
{
foreach (var ch1 in str1)
{
var char_by_char1 = ch1;
dispatcherObj.Invoke(new Action(() =>
{
first_result.Content += char_by_char1.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
});
string str2 = "NUMBER OF PASSED:" + "\t\t" + passed2.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed2.ToString();
var tsk2 = Task.Factory.StartNew(()=>
{
foreach (var ch2 in str2)
{
var char_by_char2 = ch2;
dispatcherObj.Invoke(new Action(() =>
{
second_result.Content += char_by_char2.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
});
你不能用第三方物流来代替,比如:
string str1 = "NUMBER OF PASSED:" + "\t\t" + passed1.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed1.ToString();
foreach (var ch1 in str1)
{
var char_by_char1 = ch1;
Dispatcher.BeginInvoke(new Action(() =>
{
first_result.Content += char_by_char1.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
string str2 = "NUMBER OF PASSED:" + "\t\t" + passed2.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed2.ToString();
foreach (var ch2 in str2)
{
var char_by_char2 = ch2;
Dispatcher.BeginInvoke(new Action(() =>
{
second_result.Content += char_by_char2.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
var dispatcherObj = Dispatcher.CurrentDispatcher;
string str1 = "NUMBER OF PASSED:" + "\t\t" + passed1.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed1.ToString();
var tsk1 = Task.Factory.StartNew(()=>
{
foreach (var ch1 in str1)
{
var char_by_char1 = ch1;
dispatcherObj.Invoke(new Action(() =>
{
first_result.Content += char_by_char1.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
});
string str2 = "NUMBER OF PASSED:" + "\t\t" + passed2.ToString() + Environment.NewLine + "NUMBER OF FAILED:" + "\t" + failed2.ToString();
var tsk2 = Task.Factory.StartNew(()=>
{
foreach (var ch2 in str2)
{
var char_by_char2 = ch2;
dispatcherObj.Invoke(new Action(() =>
{
second_result.Content += char_by_char2.ToString();
System.Threading.Thread.Sleep(5);
}), DispatcherPriority.Background);
}
});
我正在任务/非UI线程上运行循环,并使用Dispatcher.Invoke发布UI更改。答案是肯定的
但不像你在那里做的那样
Dispatcher begininvoke将在UI线程上运行您的操作
这个线程是用来处理UI的所有事情,包括你可能不想打断的事情,比如显示你的新角色
作为经验法则
永远不要休眠UI线程,因为它会冻结UI
在本例中,“other”调用无法执行任何操作,因为您烧掉了试图在其上运行它的线程。启动的第一个调用是在一段时间内唯一可以执行任何操作的调用,在它完成之前,您将看不到结果
我建议您删除以下行:
System.Threading.Thread.Sleep(5);
现在不会有延迟,但您的ui不会被冻结
使该操作异步
插入一行:
await Task.Delay(5);
睡觉的地方
你预计会耽搁多久
5是5毫秒
也许你想要500或5000
然后你释放了这个线程,你认为他们应该有机会表现得更像你期望的那样
根据您正试图执行的操作,您可能会更好地附加到操作列表中,每个操作都会更改一个字母
然后,您可以使用wait task.delay进行迭代以引入延迟。您的意思还不完全清楚:该代码可以工作,但将在第一个结果中显示str1,然后在第二个结果中显示str2。您的意思是要交错它们(对于它们,您只需要一个循环,并且在每个循环中调用两次)?为什么你想一个角色一个角色地在事件循环中单独发帖?感谢的Prateek Shrivastava这正是我想要的:D