我意识到这是一个非常开放的问题,可以得到各种各样的答案,但是这里有.
使用C#(或Java,或任何OO语言),是否有一个通用规则说明应该将多少变量传递给构造函数?我传递给扩展类的构造函数的变量数似乎失控了.
为了封装类的数据,我将成员声明为private,在构造函数中初始化它们,并使用公共访问器.
这是一个例子:
public class A
{
private int var1;
private int var2;
private int var3;
//3 variables passed in
public A(int v1, int v2, int v3)
{
var1 = v1;
var2 = v2;
var3 = v3;
}
//Properties (accessors) here
}
public class B : A
{
private int var4;
private int var5;
//5 variables passed in
public B(int v1, int v2, int v3, int v4, int v5)
: base(v1,v2,v3)
{
var4 = v4;
var5 = v5;
} …Run Code Online (Sandbox Code Playgroud) 我有一个从C#类库运行的命令行可执行文件.在一些非常罕见的情况下,由于传递给它的命令行数据,可执行文件将挂起.不幸的是,这导致调用c#DLL的应用程序挂起,同时它无限期地等待进程退出.
如果命令行exe在1秒内没有完成执行,它永远不会退出.我想做的是在进程启动后立即生成一个计时器,并在几秒钟内没有退出时强制关闭进程.
这里最好的方法是什么?解决方案需要对性能产生最小的影响,因为此命令行进程是高度重复性任务的瓶颈.
编辑:为什么我应该使用System.Timer而不是Threading.Timer,反之亦然?
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = workingDirectory;
startInfo.FileName = commandLineExe;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = strArguments;
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)
请不要提出我应该尝试的建议,找出命令行应用程序挂起的原因,或者我应该将命令行功能重构为源代码.我们正在积极解决这个问题,但应用程序的稳定性需要先行.
这些陈述有效吗?
UPDATE Table1
FROM (SELECT * FROM Table2)
INSERT INTO Table1
(SELECT * FROM Table2)
Run Code Online (Sandbox Code Playgroud) 我试图将双精度转换为本机NT应用程序中的字符串,即仅依赖于的应用程序ntdll.dll.不幸的是,ntdll的版本vsnprintf不支持%fet al.,迫使我自己实现转换.
上述ntdll.dll出口只有少数的math.h功能(floor,ceil,log,pow,...).但是,我有理由相信,math.h如果有必要,我可以实现任何不可用的功能.
在GNU的libc中有一个浮点转换的实现,但代码非常密集且难以理解(GNU缩进样式在这里没有帮助).
我已经通过对数字进行归一化来实现转换(即将数字乘以/除以10直到它在间隔中[1, 10)),然后通过modf将小数部分减去10并将小数部分乘以10来生成每个数字.这有效,但是精度损失(只有前15位是正确的).当然,精度的损失是算法固有的.
我会使用17位数字,但是能够正确生成任意数量的数字的算法将是首选.
你能建议一个算法或指向一个好的资源吗?
我有一个打开的jQuery对话框,然后进行AJAX调用.我想这样做,如果关闭对话框或按下取消按钮,AJAX调用将被取消,并且不会调用其回调函数.我可以想办法用这样的变量做到这一点:
function doStuff(){
var doCallback = true;
$('#dialog').dialog({
title: 'Dialog Title',
modal: true,
buttons: {
Cancel: function() {
doCallback = false;
doSomethingElse();
}
}
});
$.get('url/url/url', function(data){
if(doCallback){
doTheSuccessThing(data);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是,不知何故,这对我来说感觉很脏,并且实际上并没有阻止AJAX调用完成.是否有内置方法取消正在进行的AJAX调用?
我目前正在与WatiN合作,并发现它是一个伟大的网页浏览自动化工具.但是,截至上一版本,它的屏幕捕获功能似乎缺乏.除了Charles Petzold的一些代码之外,我还提出了一个可行的解决方案,用于从屏幕捕获屏幕截图(独立生成类似于此StackOverflow问题的代码).不幸的是,缺少一个组件:实际窗口在哪里?
WatiN方便地为hWnd您提供浏览器,因此我们可以(使用此简化示例)设置为从屏幕复制图像,如下所示:
// browser is either an WatiN.Core.IE or a WatiN.Core.FireFox...
IntPtr hWnd = browser.hWnd;
string filename = "my_file.bmp";
using (Graphics browser = Graphics.FromHwnd(browser.hWnd) )
using (Bitmap screenshot = new Bitmap((int)browser.VisibleClipBounds.Width,
(int)browser.VisibleClipBounds.Height,
browser))
using (Graphics screenGraphics = Graphics.FromImage(screenshot))
{
int hWndX = 0; // Upper left of graphics? Nope,
int hWndY = 0; // this is upper left of the entire desktop!
screenGraphics.CopyFromScreen(hWndX, hWndY, 0, 0,
new Size((int)browser.VisibileClipBounds.Width, …Run Code Online (Sandbox Code Playgroud) 我想获取列表的特定索引后的所有元素.这可以写成:
set foo {0 1 2 3 4 5 6 <...> n}
puts [lrange $foo 1 [llength $foo]]
Run Code Online (Sandbox Code Playgroud)
但是,计算列表长度似乎是浪费.如果lrange的最后一个参数是可选的并且省略它意味着继续直到列表的结尾,那将是很好的,但是,唉今天不是这样.
有没有其他方法在Tcl中有效地执行此操作而不计算列表的长度?
我正在移植一个Linux工具集,它经常使用shell函数来提供某些功能.这些函数在您启动新shell时会自动获取,并包含更改工作目录等内容,这对于独立程序来说几乎是不可能的,因为子进程无法更改其父级环境.
例如,有一个函数cdbm可以将工作目录更改为先前已添加书签的目录.现在我想在Windows上做同样的事情,但我坚持不懈cmd.exe.据我所知,脚本可以移植到jscript,vbscript或普通批处理,这应该不是问题.但是,我如何确保它们在启动时自动获取并生活在shell的环境中?
我正在构建一个基于Qt的项目,并且在目标文档中找到了许多Qt类.
如何告诉Doxygen禁用某些类的文档生成?对于Q.*?
我们已经采用了实体框架,我们发现当多个人在他们各自的源控制分支中进行单独的更改时,当它们在合并中聚集在一起时会发生大量冲突,导致模型文件损坏.
我们倾向于强制对文件进行独占检查,但我想避免这种情况.
我的问题是......
是否有更好的比较工具可以更好地处理这个问题,还是我们可以采取另一种方法?
寻找可能的事情.
新更新: 对于遇到此问题的人,它基于旧的EF.我建议在EDMX上使用DbContext.这里有很多关于它的信息.数据库优先或代码优先的简单性远远超过了我认为设计师的损失.
更新: 我们通过强制对文件进行独占更改来解决此问题.通过添加此过程,我们完全消除了任何问题.虽然这不是理想的解决方案,但它是最可靠和最容易实施的.