Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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# 从后台线程持续更新表单_C#_Winforms - Fatal编程技术网

C# 从后台线程持续更新表单

C# 从后台线程持续更新表单,c#,winforms,C#,Winforms,假设我在异步套接字(因此退出一些后台线程)上收到了一些信息,这些异步套接字不断地更新表单。如何安全地更新表单内容,以避免关闭表单时有时抛出的ObjectDisposedException 在更新操作(在后台线程上进行)中,我检查表单的属性IsDisposed,但这是没有用的,因为UI线程有时会在检查之后和更新操作之前立即处理表单,导致抛出异常(当我关闭表单时) 我尝试在表单的“onScreenFormClosed”处理程序中的表单对象和更新操作上使用锁,以确保这些操作不会同时执行,但这会阻塞UI

假设我在异步套接字(因此退出一些后台线程)上收到了一些信息,这些异步套接字不断地更新表单。如何安全地更新表单内容,以避免关闭表单时有时抛出的ObjectDisposedException

在更新操作(在后台线程上进行)中,我检查表单的属性IsDisposed,但这是没有用的,因为UI线程有时会在检查之后和更新操作之前立即处理表单,导致抛出异常(当我关闭表单时) 我尝试在表单的“onScreenFormClosed”处理程序中的表单对象和更新操作上使用锁,以确保这些操作不会同时执行,但这会阻塞UI线程


我甚至尝试在UI线程上运行更新操作,但是没有用,因为表单上的调用调用(…)仍然抛出ObjectDisposedException

您可以更改生成后台线程的类吗?我会让他们观察表单上的适当事件,并检查表单是否在更新信息开始时关闭

C#使用事件和委托来实现观察者和可观察模式,但不管更新了多少表单,只会更新那些仍在观察的表单


我通过执行以下操作来处理此问题:


在UI窗体的OnClose事件中,我向后台线程发送了一个“we is Exit”(我们正在退出)命令,以便它们停止操作,然后在短时间内休眠UI线程以允许后台线程关闭,这对我来说很好,但可能并不适用于所有情况。

看看这个问题,寻找解决方案:有什么原因不能抓住这个异常?