Tag: .net

确保只有一个应用程序实例

可能重复: 创建单个实例应用程序的正确方法是什么? 我有一个Winforms应用程序,它通过以下代码启动启动画面: Hide(); bool done = false; // Below is a closure which will work with outer variables. ThreadPool.QueueUserWorkItem(x => { using (var splashForm = new SplashScreen()) { splashForm.Show(); while (!done) Application.DoEvents(); splashForm.Close(); } }); Thread.Sleep(3000); done = true; 以上是主窗体的代码隐藏,并从加载事件处理程序调用。 但是,如何确保一次只加载一个应用程序实例? 在主窗体的load事件处理程序中,我可以检查进程列表是否在系统上(通过GetProcessesByName(…)),但是有更好的方法吗? 使用.NET 3.5。

DataReader如何工作?

我认为如果没有与SQLServer的连接,SQLDataReader应该不起作用。 我试验了这个场景。 我执行ExecuteReader然后停止SQLServer服务并尝试迭代DataReader。 我所期待的是一个例外,但它一个接一个地给出了结果。 理想情况下,DataReader应该从连接到数据库服务器的流一次读取一行,如果我们断开数据库服务器,应该抛出exception? 我不知道,我在这里失踪的是什么。

如何在1Darrays中“展平”或“索引”3Darrays?

我试图在我的游戏中将3D数组压缩为1D数组中的“块”系统。 这是一个3D块游戏,基本上我希望块系统几乎与Minecraft的系统完全相同(但是,这不是Minecraft克隆的任何措施)。 在我以前的2D游戏中,我使用以下算法访问了扁平化数组: Tiles[x + y * WIDTH] 然而,这显然不适用于3D,因为它缺少Z轴。 我不知道如何在3D空间中实现这种算法。 宽度,高度和深度都是常量(宽度和高度一样大)。 它只是x + y*WIDTH + Z*DEPTH ? 我的数学非常糟糕,我只是开始进行3D编程,所以我很遗憾:| PS。 这样做的原因是我循环并通过索引从中获取相当多的东西。 我知道1Darrays比多维arrays更快(出于我无法记住的原因:P)。 即使这可能没有必要,我希望尽可能好的表现:)

升级应用程序时安装到相同路径

我有一个应用程序,我正在实现自动更新。 我有一个程序检查的Web服务,如果需要升级它,下载并运行新的安装程序(Visual Studio 2005安装项目),之后程序重新启动。 一切都很好。 但是,如何确保安装程序中的安装路径默认为用户最初安装程序的路径? 例如,如果用户将其从程序文件更改为C:\ SomeFolder,我将如何让安装程序检测到并将其安装路径更改为C:\ SomeFolder而不是程序文件? 或者,如果用户选择将其安装为“当前用户”而不是“所有用户”?

阻止.NET WebBrowser控件中的对话框

我有一个.NET 2.0 WebBrowser控件,用于导航一些没有用户交互的页面(不要问……长篇故事)。 由于此应用程序的用户性质较少,我已将WebBrowser控件的ScriptErrorsSuppressed属性设置为true,VS 2005状态中包含的文档将“隐藏其源自底层ActiveX控件的所有对话框,不只是脚本错误。“ 但是, MSDN文章没有提到这一点。 我已经设法取消了NewWindow事件,这会阻止弹出窗口,因此需要处理。 任何人都有使用其中一个并成功阻止所有对话框,脚本错误等的经验? 编辑 这不是IE的独立实例,而是生成在Windows窗体应用程序上的WebBrowser控件的实例。 任何人都有使用此控件或底层AxSHDocVW的经验吗? 再次编辑 对不起,我忘了提这个……我试图阻止一个JavaScript警报() ,只需一个OK按钮。 也许我可以转换成IHTMLDocument2对象并以这种方式访问​​脚本,我已经使用过MSHTML了,有人都知道吗?

ef4导致Web服务中的循环引用

我有一个Reason对象: public class Reason { public virtual long Id { get; set; } public virtual string Name { get; set; } public virtual Company Company {get;set;} } 我使用entity framework4,公司是公司的导航属性。 我还使用webservices将数据返回给客户端。 我有web方法返回原因: [WebMethod] public Reason[] GetCallReasons() { IReasonRepository rep = ObjectFactory.GetInstance(); return rep.GetReasonsList().ToArray(); } 由于ef4,我在执行web方法时遇到以下exception: A circular reference was detected while serializing an object of type […]

动态更改app.config文件中的值

我想修改app.config中appSetting部分的值。 所以我写道, Console.WriteLine(ConfigurationManager.AppSettings[“name”]); Console.Read(); Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings[“name”].Value = “raja”; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(“appSettings”); Console.WriteLine(ConfigurationManager.AppSettings[“name”]); Console.Read(); 执行上面的代码后,我validation了app.config是否更改了“name”元素的值。 但没有变化。 我的代码有什么问题? 或者有没有其他方法可以做到这一点?

如何在32位平台上pinvoke到GetWindowLongPtr和SetWindowLongPtr?

我想P / Invoke到GetWindowLongPtr和SetWindowLongPtr ,我看到有关它们的相互矛盾的信息。 有些消息称,在32位平台上,GetWindowLongPtr只是一个调用GetWindowLong的预处理器宏,而GetWindowLongPtr不作为user32.dll中的入口点存在。 例如: SetWindowLongPtr的pinvoke.net条目有一个静态方法,它检查IntPtr.Size,然后调用SetWindowLong或SetWindowLongPtr,注释说“遗留操作系统不支持SetWindowLongPtr”。 没有解释“遗留操作系统”的含义。 StackOverflow的答案是 “On 32bit系统GetWindowLongPtr只是一个指向GetWindowLong的C宏”。 因此,这些来源似乎表明* Ptr入口点根本不存在于32位Windows 7附带的user32.dll版本中。 但我在MSDN文档中没有看到这一点。 根据MSDN, SetWindowLongPtr取代了SetWindowLong,简单明了。 根据SetWindowLongPtr页面的要求部分,看起来SetWindowLongPtr自Windows 2000(客户端和服务器版本)以来一直在user32.dll中。 同样,没有提到32位操作系统中缺少的入口点。 我怀疑事实介于两者之间:当你告诉C ++编译器定位较旧的操作系统(即编译将在Win9x和NT4上运行的东西)时,头文件将SetWindowLongPtr声明为调用SetWindowLong的宏,但是入口点可能确实存在于Windows 2000及更高版本中,如果您告诉编译器定位这些平台,您将直接获取它(而不是宏)。 但这只是猜测; 我真的没有资源或技术可以深入挖掘并validation它。 目标平台也可能扮演一个角色 – 如果您为x86平台编译应用程序,那么就不应该在64位操作系统上调用SetWindowLongPtr。 再一次,我知道这个问题,但我不知道如何找到答案。 MSDN似乎暗示SetWindowLongPtr总是正确的。 有人能告诉我简单的P / Invoke到SetWindowLongPtr是否安全并完成它? (假设Windows 2000及更高版本。)P /调用SetWindowLongPtr会给我正确的入口点: 如果我在32位操作系统上运行针对x86平台的应用程序? 如果我在64位操作系统上运行针对x86平台的应用程序? 如果我在64位操作系统上运行针对x64平台的应用程序?

C#.NET Bitmap的最大分辨率是多少?

从理论上讲,它应该是65,535 x 65,535,因为你有足够的内存,大约17GB。 但是,创建一个.NET 4.5控制台应用程序来测试它,它会抛出System.ArgumentException:参数无效。 该应用程序是为64位平台构建的。 在具有32GB内存的64位平台上运行。 我能够获得的最大分辨率是22,000 x 22,000像素。 我找不到任何关于此的文件。 奇怪的是,即使在22,000 x 22,000像素,它也不总是有效。 它有时会起作用,它有时会抛出exception。 这让我觉得它与连续的内存分配有关,但是有大约30GB的可用内存。 有没有人有这方面的经验? 如果我想使用100,000 x 100,000像素和更大的图像,那么除了实现我自己的位图之外,最好的方法是什么呢? 编辑:问题不是.NET最大对象大小。 这可以通过针对64位平台,并在应用程序配置中设置gcAllowVeryLargeObjects标志来克服。 通过这种方式,我可以使应用程序使用单个整数数组消耗超过15GB的内存。 到目前为止,答案似乎在于GDI +的底层实现,但我该如何解决它呢?

如何以PDF格式呈现ASP.NET MVC视图

我正在使用ExpertPDF的Html-to-PDF转换实用程序来解决这个问题(尽管如果有足够的文档,我会对其他库开放)。 简而言之,我有一个以特定方式格式化的视图,我想将其呈现为用户可以保存到磁盘的PDF文档。 到目前为止我所拥有的是一个PrintService(它实现了一个IPrintService接口),这个实现有两个PrintToPDF()重载,一个只接受一个URL,另一个接受一个HTML字符串,两者都返回一个byte []。 我只计算了需要HTML字符串的第二个重载的细节。 我想从我的控制器做的事情是这样的: public FileStreamResult Print(int id) { var model = _CustomRepository.Get(id); string renderedView = SomethingThatRendersMyViewAsAString(model); Stream byteStream = _PrintService.PrintToPdf(renderedView); HttpContext.Response.AddHeader(“content-disposition”, “attachment; filename=report.pdf”); return new FileStreamResult(byteStream, “application/pdf”); } 这在理论上会将PDF呈现给页面。 这是我正在寻求帮助的“SomethingThatRendersMyViewAsAString”。 有没有快速的方法来获取视图的字符串表示? 或许我应该坚持使用URL重载并将URL传递给视图……还有其他想法吗? 谢谢!