3DMAX二次开发N大噩梦

  • 使用 ShowDialog (modal) 他可能崩溃
  • 使用多线程,如果线程异常,他不会为你报告异常 他可能崩溃
  • 如果对窗口资源使用了Dispose,那么在下一次打开任意一个具有模态属性的窗口时 他可能崩溃(2021)
    2021.3.28 : 2022版本发布已修复

以上三条经过摸索推测:
模态框的本质是禁用父窗体,当弹出模态框后,MAX后台扫描父窗体发起禁用操作,但未对资源做可用检测。


在这种情况下,max主动要求崩溃,事实上功能依然完好,利用后台线程,你依然可以利用代码打开模型,甚至渲染

global LoadingForm
fn loading =
(
	try LoadingForm.Dispose() catch() -- crash
	-- try LoadingForm.Close() catch() -- ok
	--	
	LoadingForm = DotnetObject "MaxCustomControls.MaxForm"
	LoadingForm.Size = (DotnetObject "System.Drawing.Size" 500 600)
	LoadingForm.StartPosition = (DotnetClass "System.Windows.Forms.FormStartPosition").CenterScreen
	--
	MaxHwndPtr = (DotNetObject "System.IntPtr" (Windows.GetMaxHwnd()))
	LoadingForm.Show((DotNetObject "System.Windows.Forms.NativeWindow").FromHandle MaxHwndPtr)
)

loading()
	sleep 0.2
loading()

messageBox "crash!"
原文地址:https://www.cnblogs.com/trykle/p/14348501.html