我们正在开发一个非常大的.NET WinForms复合应用程序 - 不是CAB,而是一个类似的本土框架.我们正在运行在Windows Server 2003上的Citrix和RDP环境中运行.
我们开始遇到随机和难以复制的"错误创建窗口句柄"错误,这似乎是我们的应用程序中的旧时尚句柄泄漏.我们正在大量使用第三方控件(Janus GridEX,Infralution VirtualTree和.NET Magic对接),我们根据数据库中的元数据进行了大量动态加载和内容呈现.
谷歌有很多关于这个错误的信息,但没有很多关于如何避免这方面问题的可靠指导.
stackoverflow社区是否对我构建易于操作的winforms应用程序有任何良好的指导?
Windows XP为每个进程限制10000个用户句柄,每个桌面会话总共32000个用户句柄.但是,当我运行4或5个SWT进程时,每个消耗不超过2000个用户句柄,SWT No More处理异常将始终抛出.
有谁知道为什么?
有没有办法如何枚举Windows中给定PID的进程,并获取所有打开的句柄列表(锁定文件等)?
编辑:我不关心语言.如果它在.NET中,我会很高兴,如果在WinApi(C)中,它不会受到伤害.如果在别的东西,我想我可以重写它:-)
我正在尝试使用功能SetForegroundWindow(HWND hWnD)
.我有一些句柄,但它不作为上述功能的参数.我的句柄是一个线程,我想在前台运行它.
HWND和HANDLE之间有什么区别?
我需要像这张图片一样制作可调整大小的句柄.
更具体地说,我需要在我周围设置那些蓝点<div>
以允许从不同侧面调整大小.
目前我正在使用以下代码:
<html>
<head>
<link rel="stylesheet" href="jquery-ui-1.10.2/themes/base/jquery-ui.css" />
<script src="jquery-1.9.1.min.js"></script>
<script src="jquery-ui-1.10.2/ui/jquery-ui.js"></script>
<title>border</title>
<script type="text/javascript">
$(function() {
$('#elementResizable').resizable({
handles: {
'ne': '#negrip',
'se': '#segrip',
'sw': '#swgrip',
'nw': '#nwgrip'
}
});
});
</script>
<style>
#elementResizable {
border: 1px solid #000000;
width: 300px;
height: 40px;
overflow: hidden;
}
#nwgrip, #negrip, #swgrip, #segrip, #ngrip, #egrip, #sgrip, #wgrip {
width: 10px;
height: 10px;
background-color: #ffffff;
border: 1px solid #000000;
}
#segrip {
right: -5px;
bottom: -5px;
}
</style>
</head>
<body>
<div …
Run Code Online (Sandbox Code Playgroud) 假设我已经有窗口的句柄,我可以得到PID GetWindowThreadProcessId
.有没有办法让我可以获得进程名称而无需获取所有进程并尝试匹配我的PID?
我来自一个背景,指针通常应该与'NULL'和'0'的整数进行比较.
由于我没有将Windows句柄视为纯粹意义上的"指针"(即"句柄"),所以我习惯将它们与0比较而不是"NULL".
显然,它们现在已经在内部实现为指针,但我个人认为这仅仅是为了获得一些类型安全而不是因为它们本质上是指针.
无论如何,我只是注意到返回HDC的CreateIC的帮助声明如果函数失败则返回'NULL'.
现在我很困惑 - 我想知道其他人的估计 - 将Windows句柄视为一个指针(并因此针对现代编译器对'NULL'或'nullptr'进行检查)是否更正确或应该考虑到是一个整数?
Microsoft的GDI +定义了许多在内部被视为句柄的空类.例如,(来源GdiPlusGpStubs.h
)
//Approach 1
class GpGraphics {};
class GpBrush {};
class GpTexture : public GpBrush {};
class GpSolidFill : public GpBrush {};
class GpLineGradient : public GpBrush {};
class GpPathGradient : public GpBrush {};
class GpHatch : public GpBrush {};
class GpPen {};
class GpCustomLineCap {};
Run Code Online (Sandbox Code Playgroud)
还有其他两种方法来定义句柄.他们是,
//Approach 2
class BOOK; //no need to define it!
typedef BOOK *PBOOK;
typedef PBOOK HBOOK; //handle to be used internally
//Approach 3
typedef void* PVOID;
typedef PVOID HBOOK; //handle …
Run Code Online (Sandbox Code Playgroud) 我正在将一些代码从VB.NET迁移到C#(3.5).
我找到的结构如下:
Public Event DataLoaded(ByVal sender As Object, ByVal e As EventArgs)
Protected Sub Mag_Button_Load_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Mag_Button_Load.Click
[..]
RaiseEvent DataLoaded(Me, EventArgs.Empty)
End Sub
[..]
'Other Class
Private Sub LoadData(ByVal sender As Object, ByVal e As System.EventArgs) Handles oData.DataLoaded
[..]
End Sub
Run Code Online (Sandbox Code Playgroud)
将此类行为转换为C#最直接的方法是什么?
我的Eclipse用于开发Android应用程序.它工作正常,直到有一天,一个Unhandled事件循环异常是提示.日志如下所示.
要触发错误提示,只需将文本编辑器在eclipse中取消聚焦并再次聚焦,然后触发提示,例如,单击Package explorer(红色圆圈)并单击Main.java中的代码(绿色圆圈).日食.(.xml是相同的).
但是,如果我通过单击Package Explorer(红色圆圈)取消代码的焦点,然后单击代码的标题(蓝色圆圈),然后单击代码(绿色圆圈),将不会提示错误.
PS使用Eclipse可以编译Android应用程序并在设备中正常工作.但错误提示非常烦人.
![在此处输入图像说明] [1]
我试过了:
从Android开发人员下载新的ADT(Eclipse)表单并解压缩它,不工作,仍然没有更多的句柄
下载Eclipse Standard 4.3.1并解压缩,无法正常工作
重启计算机,重启Eclipse.不工作
创建一个新的Windows 7帐户,并使用新帐户打开相同的eclipse(在旧帐户中抛出错误)与相同的工作区,它的工作原理.没有例外.
我试图用C:\ oldUser.android替换C:\ oldUser.android,旧用户仍然例外
更改首选项>常规>编辑器>文件关联>*.xml和Android Manifest中的默认编辑器,无法正常工作
在Eclipse中重置透视图,无法正常工作
更改工作区并使用新工作区,而不是工作
我想使用旧用户帐户正确打开Eclipse.真奇怪.请帮忙.非常感谢你!!
org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:4387)
at org.eclipse.swt.SWT.error(SWT.java:4276)
at org.eclipse.swt.SWT.error(SWT.java:4247)
at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
at org.eclipse.swt.widgets.Control.createHandle(Control.java:704)
at org.eclipse.swt.widgets.Label.createHandle(Label.java:199)
at org.eclipse.swt.widgets.Control.createWidget(Control.java:744)
at org.eclipse.swt.widgets.Control.<init>(Control.java:112)
at org.eclipse.swt.widgets.Label.<init>(Label.java:101)
at org.eclipse.ui.texteditor.StatusLineContributionItem.fill(StatusLineContributionItem.java:182)
at org.eclipse.jface.action.SubContributionItem.fill(SubContributionItem.java:59)
at org.eclipse.jface.action.StatusLineManager.update(StatusLineManager.java:327)
at org.eclipse.ui.internal.WorkbenchPage.updateActivations(WorkbenchPage.java:265)
at org.eclipse.ui.internal.WorkbenchPage.access$15(WorkbenchPage.java:243)
at org.eclipse.ui.internal.WorkbenchPage$E4PartListener.partActivated(WorkbenchPage.java:172)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$2.run(PartServiceImpl.java:193)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.firePartActivated(PartServiceImpl.java:191)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:596)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:549)
at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:105)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$1.handleEvent(ContributedPartRenderer.java:61)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1058) …
Run Code Online (Sandbox Code Playgroud)