C# 使用动画gif对WinForms窗体进行单元测试时出现AppDomainUnloadedException

C# 使用动画gif对WinForms窗体进行单元测试时出现AppDomainUnloadedException,c#,vb.net,winforms,unit-testing,animation,C#,Vb.net,Winforms,Unit Testing,Animation,我们的一些集成测试(作为VisualStudio单元测试实现)显示WinForms表单。对于其中一些,我们在测试输出窗口中碰巧得到以下消息: ------ Run test started ------ System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain. This can happen if the test(s) started a thread but did not stop it. M

我们的一些集成测试(作为VisualStudio单元测试实现)显示WinForms表单。对于其中一些,我们在测试输出窗口中碰巧得到以下消息:

------ Run test started ------
System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain. This can happen if the test(s) started a thread but did not stop it. Make sure that all the threads started by the test(s) are stopped before completion.
========== Run test finished: 1 run (0:00:00,1699987) ==========
我将其缩小到包括图片盒中的动画GIF的形式,并设法创建了一个MCVE:


公共子AppDomainException()
使用f作为新的Testform()
f、 Show()
f、 关闭()
终端使用
端接头
公共类测试表单
继承形式
私有常量Gif="R0Lgoddhaqagbaoaaaaaaaaebaqicagmdawbaufqygbgchbwgicakjcqokcgzlcwmda0和q4odg8pdxaqeTexqufffffffffffffffwHcxGxGyGbGb0DHR4eh8FhisiiiijyqkjjjkkkkkjczzkkkkkkkkkkkzkkkkkkkkkkkkkkkkkkkkkkkkzzzwwwwWfHcxHcxHcxHcxHcxGb0Ff0Dg0Dg0Dg0Dg0Dg0Dg0Hg0Dg0Dg0Dg0Dg0Dg0Dg0Hg0Dg0Hg0Hg0Hg0HgHg0H2.在中国,ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWLPAAmpQENP6IOQKMPQAQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q 9PX19FB29VF39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///YWAAAaaqabaaibad/bqaow==”
私有常量AnimatedGif=”R0LGodlhaqabaocaaaaaaaaebaqicagmdawqbaufqygbgchbwgicakjcqokcqokcglcwmda0和Q4odg8PdxaqeTexquwffffffwHcxxGyGbGb0DHR4Eh8Fh8FhisiiiijyqkJygkkkkkkkqoqskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkzzzwwwHcxFfHcxHcxHcxHcxGyGyGyGb0GyGyGb0GyGb0GyGb0GyGyGb0GyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGb02.在中国,ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWLPAAmpQENP6IOQKMPQAQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q 9PX19FB29VF39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///yH/C05Fvfndqvbfmi4waweaaah+QQACgD/acwaaaaaaqaaabbaqaifkaoaa/wasaaaaaaqaacaaqa/wUEADs=”
私人pib作为PictureBox
公共分新()
MyBase.New()
pib=新图片框()
'将AnimagedGif更改为Gif,问题就会消失
将ms用作新的MemoryStream(Convert.FromBase64String(AnimatedGif))
pib.Image=新位图(毫秒)
终端使用
Me.Controls.Add(pib)
端接头
受保护的覆盖子处置(作为布尔值处置)
如果是这样的话
pib.Dispose()
如果结束
MyBase.Dispose(Dispose)
端接头
末级

显然,PictureBox启动了某种背景线程来设置gif动画,但在处理gif时没有正确停止。有没有办法强制它这样做,或者这是PictureBox控件中的一个错误?

注意:我用C#和VB.NET标记了它,因为这是WinForms框架的问题,而不是语言的问题。示例恰好是在VB中,因为我在发现这个问题的同时正在从事一个VB项目。我仍然想邀请C#crows来看看这个问题(如果需要的话,我当然可以翻译我的例子)。没有任何机制可以让线程终止。这不可能是一个惊喜。@HansPassant:为什么这不令人惊讶呢?这不是吗(暗示)处理组件会清理所有资源的合同,包括(如果需要)工作线程?Downvoter:感谢提供反馈以改进问题。