c# 创建窗口句柄时出错,求解决办法

这是看书上做的一个加载窗口的例子,但按按书上原封不动做的,但就是出不来。出错提示就是“创建窗口句柄时出错,未处理win31exception”WaittingForm.c... 这是看书上做的一个加载窗口的例子,但按按书上原封不动做的,但就是出不来。出错提示就是“创建窗口句柄时出错,未处理win31exception”
WaittingForm.cs文件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsForms_Sample
{
public partial class WaittingForm : Form
{
public WaittingForm()
{
InitializeComponent();
}

private void WaittingForm_Load(object sender, EventArgs e)
{
WaittingForm waitting = new WaittingForm();
waitting.Show();
waitting.Activate();
Application.DoEvents();
System.Threading.Thread.Sleep(5000);
waitting.Close();
waitting.Dispose();
}
}
}

Program.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsForms_Sample
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new WaittingForm());//加载窗口
Application.Run(new MainForm()); //主窗口
//注:上面Run两行,如果把MainForm放上面,就不显示等待窗口,直接显示主窗口
}
}
}
展开
 我来答
411129362
2011-12-22 · TA获得超过4189个赞
知道小有建树答主
回答量:822
采纳率:0%
帮助的人:982万
展开全部
这种写法本身是有问题的,你在WaittingForm窗体load事件里实例化窗体本身,然后给显示出来,这本身会产生一个循环,无限的递归:
1号 WaittingForm窗体load时,实例化了2号,并显示。
2号因为是实例化的WaittingForm窗体,依然有load事件,于是load时会去实例化一个窗体3,并显示。
3号....于是无限的循环下去。
这样下去的结果就是.net的资源回收机制来不及回收所有的资源,导致资源耗尽,无法为新的窗体分配句柄,就报了这么一个错误。
不知你看的是什么书,按说能出版的书籍不应该写这种低级的代码。
改的话,可以这么改,不过治标不治本,而且你要明白,这种写法是不应该的。

try //捕捉可能的异常
{
waitting.Show();
}
catch () //如果有异常,不做任何处理,直接继续
{
}
追问
谢谢提醒,是我做错了,我把代码放错地方了。应该把等待的代码放在主窗体中,结果我给放到等待窗体中了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式