C# 从后台线程持续更新表单
假设我在异步套接字(因此退出一些后台线程)上收到了一些信息,这些异步套接字不断地更新表单。如何安全地更新表单内容,以避免关闭表单时有时抛出的ObjectDisposedException 在更新操作(在后台线程上进行)中,我检查表单的属性IsDisposed,但这是没有用的,因为UI线程有时会在检查之后和更新操作之前立即处理表单,导致抛出异常(当我关闭表单时) 我尝试在表单的“onScreenFormClosed”处理程序中的表单对象和更新操作上使用锁,以确保这些操作不会同时执行,但这会阻塞UI线程C# 从后台线程持续更新表单,c#,winforms,C#,Winforms,假设我在异步套接字(因此退出一些后台线程)上收到了一些信息,这些异步套接字不断地更新表单。如何安全地更新表单内容,以避免关闭表单时有时抛出的ObjectDisposedException 在更新操作(在后台线程上进行)中,我检查表单的属性IsDisposed,但这是没有用的,因为UI线程有时会在检查之后和更新操作之前立即处理表单,导致抛出异常(当我关闭表单时) 我尝试在表单的“onScreenFormClosed”处理程序中的表单对象和更新操作上使用锁,以确保这些操作不会同时执行,但这会阻塞UI
我甚至尝试在UI线程上运行更新操作,但是没有用,因为表单上的调用调用(…)仍然抛出ObjectDisposedException 您可以更改生成后台线程的类吗?我会让他们观察表单上的适当事件,并检查表单是否在更新信息开始时关闭 C#使用事件和委托来实现观察者和可观察模式,但不管更新了多少表单,只会更新那些仍在观察的表单
我通过执行以下操作来处理此问题:
在UI窗体的OnClose事件中,我向后台线程发送了一个“we is Exit”(我们正在退出)命令,以便它们停止操作,然后在短时间内休眠UI线程以允许后台线程关闭,这对我来说很好,但可能并不适用于所有情况。看看这个问题,寻找解决方案:有什么原因不能抓住这个异常?