在C#中使事件异步的最佳方法

Nik*_*nde 15 c# events asynchronous

事件在C#中是同步的.我有这个应用程序,我的主窗体启动一个线程,其中有一个监听流的循环.当流上出现某些事件时,会从循环向主窗体触发事件.

如果主窗体很慢或显示消息框或某些内容,循环将被暂停.围绕这个最好的方法是什么?通过在主窗体上使用回调和调用?

jfs*_*jfs 8

由于您使用的是表单,因此更简单的方法是使用BackgroundWorker组件.

BackgroundWorker类允许您在单独的专用线程上运行操作.下载和数据库事务等耗时的操作可能会导致用户界面(UI)在运行时停止响应.当您需要响应式UI并且遇到与此类操作相关的长时间延迟时,BackgroundWorker类提供了一种方便的解决方案.


Sam*_*Sam 3

嗯,我根据当时的需要使用了不同的场景。

我相信 BeginInvoke 可能是最容易编写代码的,因为您已经快到了。无论哪种方式,您都应该已经在使用 Invoke,因此只需更改为 BeginInvoke。在单独的线程上使用回调将完成与使用 BeginInvoke 相同的事情(只要您使用线程池对回调进行排队)。