C# 使用Mono.WinForms时Unity编辑器中的RegisterClass错误
我正在使用C# 使用Mono.WinForms时Unity编辑器中的RegisterClass错误,c#,winforms,mono,unity3d,registerclass,C#,Winforms,Mono,Unity3d,Registerclass,我正在使用Mono.WinForms在Unity中创建外部窗口,它工作得非常好,只是每次播放场景时都会收到此错误消息(但Unity刚启动时从未出现过): 无法注册窗口类,win32错误0 我想这是因为当我停止场景时表单类没有被注销。当我重新启动Unity时,它们确实会被注销,而当我进行构建时,它们不会出现问题,这是有道理的 我两次出现此弹出错误,原因是: myForm=newform1() myForm.Show() 我浏览了XplatUIWin32.cs文件的代码,找到了RegisterWin
Mono.WinForms
在Unity中创建外部窗口,它工作得非常好,只是每次播放场景时都会收到此错误消息(但Unity刚启动时从未出现过):
无法注册窗口类,win32错误0
我想这是因为当我停止场景时表单类没有被注销。当我重新启动Unity时,它们确实会被注销,而当我进行构建时,它们不会出现问题,这是有道理的
我两次出现此弹出错误,原因是:
myForm=newform1()代码>
myForm.Show()代码>
XplatUIWin32.cs
文件的代码,找到了RegisterWindowClass
方法。当Mono注册一个类时,它会执行以下操作:
class_name = string
.Format("Mono.WinForms.{0}.{1}",
System.Threading.Thread.GetDomainID ().ToString (), classStyle);
因此,我通过这样做成功地消除了第二个错误:
UnregisterClass("Mono.WinForms.1.0", IntPtr.Zero);
所以我的问题是,为什么它只适用于第二个弹出错误,以及如何消除第一个弹出错误?我试图强制进行垃圾收集,但没用。我试图找到另一个注册的类名,但在这里也没有运气
有关详细信息,我使用System.Windows.Forms.dll的mono版本作为参考,在Visual Studio中编译代码并在Unity中导入生成的dll。除了那些弹出错误,它工作得很好
class_name = string.Format ("Mono.WinForms.{0}.{1}", System.Threading.Thread.GetDomainID ().ToString (), classStyle);
两个类名应为:
- Mono.WinForms.1.0
- Mono.WinForms.1.40
System.Windows.Forms.dll
查看显示类名的消息框
信息
我认为classStyle
可能不固定,最好尝试不同的数字
但是!!
我仍然可以看到带有“Mono.WinForms.1.40”信息的消息框我认为第二个类是SWFClass1
,以IntPtr.Zero
作为父类,但是当我尝试注销它时,即使表单已关闭并被释放,它仍返回False
。