我在主窗口中创建了新的WPF项目:
public MainWindow()
{
InitializeComponent();
Thread Worker = new Thread(delegate(){
this.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, new Action(delegate
{
while (true)
{
System.Windows.MessageBox.Show("asd");
Thread.Sleep(5000);
}
}));
});
Worker.Start();
}
问题出在MainWindow挂起的那些消息之间。我如何让它异步工作?
答案 0 :(得分:4)
因为您告诉UI线程要休眠,并且您没有让调度程序返回处理其主消息循环。
尝试更像
的内容Thread CurrentLogWorker = new Thread(delegate(){
while (true) {
this.Dispatcher.Invoke(
DispatcherPriority.SystemIdle,
new Action(()=>System.Windows.MessageBox.Show("asd")));
Thread.Sleep(5000);
}
});
答案 1 :(得分:0)
您尝试归档什么?
你的while-Loop和Thread.Sleep()在UI-Thread上执行,所以难怪MainWindow挂起。
你应该把这两个放在BeginInvoke调用之外,而只放在Action里面的MessageBox.Show。
答案 2 :(得分:0)
您发送给Dispather.BeginInvoke的委托代码在主线程中执行 你不应该在BeginInvoke方法的委托中睡觉或做其他长时间的工作。
你应该在像BeginInovke这样的方法之前做很长时间的工作。
Thread CurrentLogWorker = new Thread(delegate(){
while (true)
{
this.Dispatcher.Invoke(DispatcherPriority.SystemIdle, new Action(delegate
{
System.Windows.MessageBox.Show("asd");
}));
Thread.Sleep(5000);
}
});
CurrentLogWorker.Start();