■C# 老是堆栈溢出异常!! 如何清理堆栈? ★★★

C#调APIGetCursorPos现有需要每隔50毫秒执行一次,但十分钟(不定期)后报堆栈溢出!`(更改间隔也无效)请求解决方案!堆栈如何清理??有时连Graphics... C# 调 API GetCursorPos

现有需要每隔50毫秒执行一次,
但十分钟(不定期)后报堆栈溢出!` (更改间隔也无效)
请求解决方案! 堆栈如何清理??

有时连 Graphics gp = new Graphics(); 也会报堆栈溢出!

我的程序是 桌面辅助工具.
想时刻显示鼠标位置, 鼠标所在控件句柄等信息, 堆栈问题如何解决!!
十万火急!!
例子呢?`

我调用的是API. GC不能清理, 取到的是值引用, 用ref 去取`
还有些API 是用来调用的, 如何做Dispose呢?` 继承IDispose吗?` Dispose方法又如何实现??

并且API 我定义为静态, 调用的又如何清理?`
展开
 我来答
腐烂生存
2009-01-02 · TA获得超过270个赞
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
什么方式调用的API?我试了一下如下方式不会溢出的
public struct POINTAPI
{
public Int32 x;
public Int32 y;
}

//导入并执行GetCursorPos
[DllImport("User32.dll")]
private static extern Int32 GetCursorPos(ref POINTAPI lpPoint);
private void button1_Click(object sender, EventArgs e)
{
POINTAPI lPos = new POINTAPI();
for (int i = 0; i < 1000000; i++)
{
GetCursorPos(ref lPos);
}
MessageBox.Show(lPos.x.ToString() + "\r\n" + lPos.y.ToString());
}

是不是线程中的其他代码造成的?另外获取鼠标有标准代码:Control.MousePosition

GC只有在程序域终结或所有对象都不再引用该对象时才会被收集,也就是说 [DllImport("User32.dll")]这种方式导入的DLL是不会被GC收集的
xupeiying
2009-01-02 · TA获得超过468个赞
知道小有建树答主
回答量:553
采纳率:0%
帮助的人:565万
展开全部
你把使用的资源及时的手动释放,API属于非托管代码,可能由于.net垃圾回收没有起作用或者回收不及时。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友be0657f
2009-01-02 · TA获得超过479个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:317万
展开全部
对非托管资源的调用,必须使用Dispose释放。
MSDN有垃圾回收机制的详细说明,参见:
http://msdn.microsoft.com/zh-cn/library/f144e03t(VS.80).aspx
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
衣浩漫8
2009-01-02
知道答主
回答量:58
采纳率:0%
帮助的人:0
展开全部
三个四大
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式