Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF应用程序中的Application.DoEvents()等效于什么_C#_Wpf_Winforms_Doevents - Fatal编程技术网

C# WPF应用程序中的Application.DoEvents()等效于什么

C# WPF应用程序中的Application.DoEvents()等效于什么,c#,wpf,winforms,doevents,C#,Wpf,Winforms,Doevents,从MSDN来看,似乎Application.DoEvents()在Windows.Forms中可用。WPF中的等效内容是什么。即使在Windows窗体中也不应该使用它。不要在UI线程上执行长时间运行的任务-使用后台线程并使用Dispatcher根据需要更新UI。使用Application.DoEvents基本上就是一种代码气味。我不知道WPF中是否有等价物,但即使有,也应该尽量避免使用。虽然我同意Skeet,但您可以在上找到类似的WPF方法。您是否正在移植使用DoEvents的旧版VB 6应用程

从MSDN来看,似乎Application.DoEvents()在Windows.Forms中可用。WPF中的等效内容是什么。

即使在Windows窗体中也不应该使用它。不要在UI线程上执行长时间运行的任务-使用后台线程并使用
Dispatcher
根据需要更新UI。使用
Application.DoEvents
基本上就是一种代码气味。我不知道WPF中是否有等价物,但即使有,也应该尽量避免使用。

虽然我同意Skeet,但您可以在上找到类似的WPF方法。

您是否正在移植使用
DoEvents
的旧版VB 6应用程序?为什么你认为你需要一个等价物呢?没有等价物。别这样。不。@Cody:不,我实际上没有移植任何东西。我只需要如上所述的功能。仅供参考。调用System.Windows.Forms.Application.DoEvents()在WPF中工作正常,并将运行您的调度程序事件等。您只需添加对它的引用。@BRAINSLAG83,WinForms'
DoEvents
不会启动调度程序操作(与
dispatcher.BeginInvoke
一起排队)。我不会把它称为代码气味,因为有时候你需要在计算中操作UI对象(并且不要做其他事情),在这种情况下,调用DoEvents()的等价物实际上更干净。@TomasGrosup:我想说,很少有情况下使用
Application.DoEvents
是有意义的。对于长期运行的工作来说,纯粹是UI创建是非常不寻常的。。。通常情况下,首先执行所有其他计算会更干净,然后只是封送到纯UI部分的UI线程。然后,您想要打印一个视觉效果,在打印WPF视觉效果之前调用DoEvents()以确保所有视觉效果在打印之前都已更新,这当然不是代码味道。@BrainsSlugs83:在后台工作线程中完成所有工作确实不应该使UI停止。听起来还有其他问题,应该在另一个问题中提问
Application.DoEvents
可以解决即时症状,但这不是正确的答案。我同意这不是正确的答案——但除非我们都犯同样的错误(因为这个问题似乎很常见),否则在后台工作线程中也不会做所有的工作。:-/--谢谢,JonSkeet,我会考虑打开一个新的问题。实际上,如果你没有在UI线程上运行一个长时间的动作,就需要有一些情况。我有一个用户控件,其中有一个作为BackGroundWorker的长时间运行的操作,它还使用dispatcher更新UI。但是,当backgroundworker运行时,控件停止响应Canvas.SetTop/Canvas.SetLeft,只有使用MSDN中的这段代码才能绕过它。@MalcolmMcCaffery:听起来很奇怪,我从未遇到过这样的事情,毕竟
backgroundworker
的全部目的是保持UI的响应性。也许你在很短的时间内发布了太多的更新,所以它会阻塞…谢谢你链接到DispatcherFrame。