我无法理解这是如何可能的.请帮忙!!
我有一个带有trayicon的应用程序.我希望在用户双击trayicon时显示一个表单.我有一个问题,可以通过快速三次或四次点击trayicon来显示2个或更多表格.我不想要单例的原因是我希望每次关闭表单时都要释放它以节省内存,也许这不是一个好主意?
我有一个名为m_form1的字段.我有一个名为ShowForm1的方法; 我在双击TrayIcon时调用方法ShowForm1.
private Form1 m_form1;
private void ShowForm1()
{
if (m_form1 == null)
{
Trace.WriteLine("*CREATE*" + Thread.CurrentThread.ManagedThreadId.ToString());
m_form1 = new Form1();
m_form1.FormClosed += new FormClosedEventHandler(m_form1_FormClosed);
m_form1.Show();
}
m_form1.BringToFront();
m_form1.Activate();
}
Run Code Online (Sandbox Code Playgroud)
因此,当Form1需要一段时间来构造时,则可以创建2,因为当第二个调用到达时m_form1仍然为null.锁定似乎不起作用,因为它是同一个线程两个调用(我猜的是UI线程),即跟踪写出*CREATE*1两次(下面).
[3560] *CREATE*1
[3560] *CREATE*1
Run Code Online (Sandbox Code Playgroud)
更改代码以包含锁定语句对我没有帮助.
private Form1 m_form1;
private object m_Locker = new object();
private void ShowForm1()
{
lock (m_Locker)
{
if (m_form1 == null)
{
Trace.WriteLine("****CREATE****" + Thread.CurrentThread.ManagedThreadId.ToString());
m_form1 = new Form1();
m_form1.FormClosed += new FormClosedEventHandler(m_form1_FormClosed);
m_form1.Show();
}
}
m_form1.BringToFront();
m_form1.Activate();
}
Run Code Online (Sandbox Code Playgroud)
我该如何处理这种情况?
多谢你们
蒂姆.
我遇到了这个代码,并希望其他人提供他们的观点......是好还是坏?;)
Class ReportClass
{
public string ReportName {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
然后在代码中使用如下:
displayReport(ReportClass.ReportName = cmbReportName.SelectedValue.ToString())
Run Code Online (Sandbox Code Playgroud)
这是我能给你的最简单的形式例子.排队是......为什么我找不到例子?这叫什么?这只是在惹麻烦吗?
编辑:我指的是就地分配.直到今天我才意识到这一点
我有一个应用程序,用户选择第一个语句和最后一个语句的日期.例如,第一个陈述= 1/1/08,最后一个陈述= 12/1/08,应该等于12个陈述.
但是,使用以下代码时,结果为11:
numPayments = DateDiff(DateInterval.Month, CDate(.FeeStartDate), CDate(.FeeEndDate))
Run Code Online (Sandbox Code Playgroud)
有没有另一种计算方法,或者我必须坚持在结果中加1?
我有两个Slackware Linux系统,POSIX信号量sem_open()调用失败,errno设置为38.示例代码重现如下(代码在CentOS/RedHat上运行正常).
是否有可能导致此问题的内核或系统配置选项?其他建议?
有问题的系统是Slackware 10.1.0内核2.6.11 /lib/librt-2.3.4.so /lib/libpthread-0.10.so,但相同的代码适用于更旧的RedHat 9内核2.4.20/lib/librt -2.3.2.so /lib/tls/libpthread-0.29.so.(也适用于CentOS 5内核2.6.18 /lib/librt-2.5.so /lib/i686/nosegneg/libpthread-2.5.so).
man sem_open表明sem_open()系统不支持此错误方式.
#define ENOSYS 38 /* Function not implemented */
Run Code Online (Sandbox Code Playgroud)
在sem_open()用户空间是librt我们对动态链接和librt存在受影响的系统.
受影响的系统声称支持POSIX信号量:_POSIX_SEMAPHORES是真的并sysconf(_SC_SEMAPHORES)确认了这一点.
谢谢,基兰
编辑1:我已经在使用的软件版本中添加了更多细节,并删除了一些不相关的评论.
编辑2:/ dev/shm安装在良好的系统上,而不是安装在坏系统上.挂载它不会改变受影响系统上的行为.我认为/ dev/shm也是必要的,但sem_open()在此之前就失败了,strace支持这个.
# /* Quick'n'dirty test program to illustrate sem_open failure
#Run this file to auto-build test and run as a.out
# Build
gcc $0 -lrt
if [ $? -ne 0 ] ; then exit ; fi …Run Code Online (Sandbox Code Playgroud) 从使用带有apache的mod_php调用的PHP脚本,有没有办法告诉apache做一个INTERNAL重定向到其他文件?
我不想从PHP读取/要求这个文件并吐出来,我认为将它传递给Apache会更有效率.我相信这可以用mod_perl完成,我很好奇,如果有办法用PHP/mod_php/apache做到这一点.
谢谢!
我已经阅读了一些涉及XNA的教程(以及它的各种版本),我仍然对绘制基元有点困惑.一切似乎都很复杂.
有人可以使用代码向我展示最简单的XNA实现,即在屏幕上绘制一行或两行吗?也许有一个简短的解释(包括样板)?
我不是游戏程序员,我有很少的XNA经验.我的最终目标是在屏幕上绘制一些线条,我最终将通过旋转等方式(手动)进行转换.然而,对于这第一步......我需要简单画线!我记得在我古老的OpenGL时代,当用一些方法调用绘制一条线时,它是相当简单的.我应该简单地恢复使用非托管Directx呼叫吗?
我有一堆图像需要每2秒一次旋转进出一个花哨的JQuery fadeIn和fadeOut.我有HTML中的所有图像来预加载它们和一个setInterval计时器,它会淡化当前图像,然后淡化下一个图像.问题是有时当你在淡入/淡出过程中点击或滚动时, JS被打断了,当前的图像永远不会消失,下一个图像会给你两张图片.
我觉得它与setInterval每2秒运行不正常有关,但有没有更好的方法来完成我需要的东西?
这是一段代码:
HTML
<a href="javascript:;">
<img id="img1" src="image1.gif" />
<img id="img2" src="image2.gif" style="display:none;" />
<img id="img3" src="image3.gif" style="display:none;" />
</a>
Run Code Online (Sandbox Code Playgroud)
JS
var numImages = 3;
var currentImage = 1;
imageInterval = window.setInterval("changeImage();", 2000);
function changeImage()
{
$("#img" + currentImage).fadeOut("slow", function() {
if (currentImage >= numImages)
{
currentImage = 0;
}
$("#img" + (currentImage + 1) ).fadeIn("slow", function() {
currentImage++;
});
});
}
Run Code Online (Sandbox Code Playgroud) 是否可以创建一个可以用可变数量的参数初始化的属性?
例如:
[MyCustomAttribute(new int[3,4,5])] // this doesn't work
public MyClass ...
Run Code Online (Sandbox Code Playgroud) 有人知道如何编辑VIM的语法文件,以便关键字自动大写吗?我需要这样做才能使我的编码风格与我团队中的其他开发人员保持一致.
我正在使用VIm版本7.2(实际上是gVIM),我使用的语法文件是Progress.vim文件(在语法目录下自动安装VIM).我对文件进行了一些调整,因为我不喜欢一些事情已经完成,但它大致相同.
TIA
我知道文件需要在getClass().getResource(filename)可以找到它的位置,但我不知道它在哪里.
我对将文件放在文件系统本身的位置以及如何使用Eclipse的功能来设置资源感兴趣.