Tag: c# 3.0

在.NET 4中使用IntPtr时出现PInvokeStackImbalanceexception? (适用于.NET 3.5)

可能会有一点菜鸟的问题,但这是过去几个小时(或几天)让我陷入困境的事情…… 我在.NET Framework 4.0的代码中调用DLL中的方法 [DllImport(“xeneth.dll”)] public static extern ErrorCode XC_GetFrame(Int32 h, FrameType type, ulong ulFlags, IntPtr buff, uint size); 然后在这里使用它: if (XC_GetFrame(myCam, XC_GetFrameType(myCam), 0, IntPtr.Zero, (uint)fs) != ErrorCode.E_NO_FRAME) 但是,当我在.NET 4.0中运行它时,我得到一个P / INVOKE错误,但是……在3.5中运行它不会触发此错误。 在我和另一个程序员完成代码之后,我们似乎把它归结为在4.0上运行不同的IntPtr。 我的应用程序需要在.NET 4.0中运行,因为应用程序所需的一些function仅在4.0中可用… 有什么可能我忽视或只是忘记包括? 任何想法都非常感谢! 汤姆 更新: 土着宣言: virtual ErrCode XCamera::GetFrame(FrameType type, unsigned long ulFlags, void *buffer, unsigned int size) 错误:对PInvoke函数’DLLTest!DLLTest.Form1 :: XC_GetFrameType’的调用使堆栈失衡。 […]

使用TableAdapter插入后返回不正确的ID

当我使用TableAdapter执行插入时: int pid = this.purchaseTableAdapter.Insert(supplierid, datetime, “”, totalprice, amountpaid); 它返回错误的id 1而它应该返回15。 如何获得正确的ID?

如何在特定时间后停止执行某个方法?

如果方法在有限的时间内没有完成,我需要停止执行。 为了完成这项工作,我可以用这种方式使用Thread.Abort方法: void RunWithTimeout(ThreadStart entryPoint, int timeout) { var thread = new Thread(() => { try { entryPoint(); } catch (ThreadAbortException) { } }) { IsBackground = true }; thread.Start(); if (!thread.Join(timeout)) thread.Abort(); } 鉴于我使用的是.NET 3.5,还有更好的方法吗? 编辑:在这里注释我的entryPoint ,但我正在为任何entryPoint寻找一个好方法。 void entryPoint() { // I can’t use ReceiveTimeout property // there is not a ReceiveTimeout for the […]

如何在vs2008中更改msi安装程序包的图标,并在为c#项目创建包后更改用户界面屏幕

我正在尝试更改msi安装程序包的图标。 我没有找到任何解决方案。 此外,我试图更改msi安装程序包的用户界面。 我为该界面获得了一些皮肤,但这是跟踪版本..任何人都知道请帮助我解决上述问题。

使用JSON.NetvalidationJsonConvert.DeserializeObject的结果(想想“尝试解析”)

我有传入的消息,我需要尝试在我自己的对象结构中解析。 这些都是形成良好的JSON主题,有些只是无稽之谈。 我使用JsonConvert.DeserializeObject(incmoingString); 去做这个。 然而,当输入是总垃圾时,这有时会给我一个例外。 其他时候,当传入的字符串是好的时候,我得到一个非完整的对象结构 – 最后它有时会工作。 我已经在try / catch中包装了转换,而不是手动validation我已经获得了反序列化结果所需的属性。 有一个更好的方法吗?

.NET – 如何创建一个类,只有一个其他特定的类可以实例化它?

我想要进行以下设置: class Descriptor { public string Name { get; private set; } public IList Parameters { get; private set; } // Set to ReadOnlyCollection private Descrtiptor() { } public Descriptor GetByName(string Name) { // Magic here, caching, loading, parsing, etc. } } class Parameter { public string Name { get; private set; } public string […]

从值获取键 – Dictionary <string,List >

我通过指定值来获取密钥时遇到问题。 我能做到这一点的最佳方式是什么? var st1= new List { “NY”, “CT”, “ME” }; var st2= new List { “KY”, “TN”, “SC” }; var st3= new List { “TX”, “OK”, “MO” }; var statesToEmailDictionary = new Dictionary<string, List>(); statesToEmailDictionary.Add(“test1@gmail.com”, st1); statesToEmailDictionary.Add(“test2@gmail.com”, st2); statesToEmailDictionary.Add(“test3@gmail.com”, st3); var emailAdd = statesToEmailDictionary.FirstOrDefault(x => x.Value.Where(y => y.Contains(state))).Key;

标准配置模式? 为什么我们需要在虚拟方法中使用“disposing”参数而不是在dipose之后调用终结器?

为什么我们需要在下面的代码片段中进行参数处理 。 此外,我们在终结器中使用false来调用dispose,它不会释放或进行清理。 那么如果处理从未被调用怎么办? 是否处理总是在终结器之前调用? using System; public class MyClass : IDisposable { private bool disposed = false; protected virtual void Dispose(bool disposing) { if (!disposed) { **//Do we really need this condition? if (disposing)** { // called via myClass.Dispose(). // OK to use any private object references } disposed = true; } } public […]

关于线程/后台工作者的问题

我有一个关于线程和后台工作者的问题,我希望你能帮忙。 我计划制作一个ftp应用程序,将文件上传到50台服务器。 用户不必等待每次上传在下一次上传之前完成,而是在寻找线程/后台工作者。 上传完成后,我想将上传“已完成/失败”的状态报告回UI。 根据我的理解,我将需要使用后台工作人员,因此我知道任务何时完成。 我知道使用线程我可以使用生产者/消费者队列或信号量来一次运行给定数量的线程但我不太确定如何使用后台工作人员来实现这一点。 所以我的问题是,什么是合理数量的后台工作人员控制上传一次运行,什么是排队其余的最佳方式? 上传文件的大小没有限制,因此可能非常小或几MB。 提前致谢。 编辑 – 我为每个运行同步的服务器测试了一个后台工作程序。 结果比单个背景工作者更快,但我不能说我完全适应同时运行50多个后台工作人员,并且由于服务器数量可能在未来增加,我决定坚持只看一个,这似乎足够快。 我将来可能会将工人数增加到2或3,但目前1似乎已足够。 感谢大家的帮助。 谢谢

从Google Chrome下载文件时出现网络错误

我编写了下面的c#代码来下载我的应用程序中的附件,当我运行代码时,我可以使用Mozilla,Internet Explorer下载文件,但这不适用于谷歌浏览器。 string base64FileString = result; byte[] binaryFile = Convert.FromBase64String(base64FileString); Response.ContentType = “application/octet-stream”; Response.AddHeader(“content-disposition”, String.Format(“attachment; filename=\”{0}\””, Request.QueryString[“FILENAME”])); Response.Clear(); Response.BufferOutput = false; Response.ClearContent(); Response.BinaryWrite(binaryFile); Response.Flush(); Response.Close(); 任何人都可以帮助我在Chrome中下载需要做的更改