在什么情况下从必要的事件中分离?

我不确定我是否完全清楚附加对象中的事件的含义。 这是我目前的理解,正确或精细: 1.不需要分离附加到本地类事件 例子: this.Closing += new System.ComponentModel.CancelEventHandler(MainWindow_Closing); public event EventHandler OnMyCustomEvent = delegate { }; 我假设当你的对象被处理或被垃圾收集时,这些函数会被释放并自动从事件中分离出来。 2.必须分离附加到不再需要的对象(= null;) 示例:附加到计时器的Elapsed事件,您只响应一次。 我假设您需要将Timer存储在本地变量中,以便在事件触发后分离Elapsed事件。 因此,在本地方法范围内声明计时器会导致泄漏: System.Timers.Timer myDataTimer = new System.Timers.Timer(1000); myDataTimer.Elapsed += new System.Timers.ElapsedEventHandler(myDataTimer_Elapsed); 3.将本地对象中的事件附加到您的class级不需要处理? 例如,如果您有一个ObservableCollection,您可以创建,监视并让它们死掉。 如果使用本地私有函数附加到CollectionChanged事件,当您的类被垃圾收集时,此函数是否会解除分配,导致ObservableCollection也被释放? 我确定我有停止使用对象并且无法从事件中分离的地方(例如,我制作的计时器示例),所以我正在寻找关于它是如何工作的更清楚的解释。

从SQL Server 2005中提取.NET程序集

我正在尝试帮助个人朋友(现在也是客户)与SQL CLR相关的问题。 他有一个SQL Server,其数据库中嵌入了3个.NET程序集。 他让我帮他从数据库中提取程序集并将它们保存为磁盘上的.dll文件。 这有可能吗?

中断睡眠线程

有没有办法中断睡眠线程? 如果我有类似的代码。 while(true){ if(DateTime.Now.Subtract(_lastExecuteTime).TotalHours > 1){ DoWork(); _lastExecuteTime = DateTime.Now(); continue; } Thread.Sleep(10000) //Sleep 10 seconds if(somethingIndicatingQuit){ break; } } 我想每小时执行一次DoWork()。 所以,我想睡10秒钟。 每10分钟左右检查一次。 但是,如果将我的睡眠设置为10分钟,并且我想要终止此后台任务,我必须等待睡眠恢复。 我的实际代码是使用Threading.ManualResetEvent来关闭后台工作,但我的问题是使用ThreadSleep代码。 如有必要,我可以发布更多代码。 好的,我将在这里添加更完整的代码,因为我认为它将回答一些问题。 private readonly ManualResetEvent _shutdownEvent = new ManualResetEvent(false); private readonly ManualResetEvent _pauseEvent = new ManualResetEvent(true); private Thread _backGroundWorkerThread; //This starts our work public void Start() { _backGroundWorkerThread = new […]

将HTML字符串添加到OpenXML(* .docx)文档

我正在尝试使用Microsoft的OpenXML 2.5库来创建OpenXML文档。 一切都很好,直到我尝试在我的文档中插入HTML字符串。 我已经在网上搜索过,这是我到目前为止所提出的内容(仅剪切到我遇到问题的部分): Paragraph paragraph = new Paragraph(); Run run = new Run(); string altChunkId = “id1”; AlternativeFormatImportPart chunk = document.MainDocumentPart.AddAlternativeFormatImportPart( AlternativeFormatImportPartType.Html, altChunkId); chunk.FeedData(new MemoryStream(Encoding.UTF8.GetBytes(ioi.Text))); AltChunk altChunk = new AltChunk { Id = altChunkId }; run.AppendChild(new Break()); paragraph.AppendChild(run); body.AppendChild(paragraph); 显然,我在这个例子中并没有实际添加altChunk,但我尝试将它附加到任何地方 – 运行,段落,正文等。在任何情况下,我都无法打开Word 2010中的docx文件。 这让我有点疯狂,因为它似乎应该是直截了当的(我承认我不完全理解AltChunk“的事情”)。 非常感谢任何帮助。 旁注:我发现有一件事很有意思,我不知道它是否真的有问题, 这个响应表明AltChunk在使用MemoryStream工作时会破坏文件。 谁能证实这是/不是真的?

嵌入式系统的C#?

“C#旨在适用于为托管和嵌入式系统编写应用程序,范围从使用复杂操作系统的大型应用程序到具有专用function的非常小的应用程序。” – 设计目标(维基百科) 虽然它在很大程度上取决于嵌入是如何“emebedded”, 你认为C#达到这个目标有多好? 您是否认为C#与C / C ++一样好,如果不是更好的工具?

使用字典值获取字典键

如何使用字典值获取字典键? 当使用密钥获取值时,如下所示: Dictionary dic = new Dictionary(); dic.Add(1, “a”); Console.WriteLine(dic[1]); Console.ReadLine(); 如何做相反的事情?

你如何设置你的.NET开发树?

你如何设置你的.NET开发树? 我使用这样的结构: -projectname –config (where I put the configuration files) –doc (where I put all the document concerning the project: e-mails, documentation) –tools (all the tools I use: Nunit, Moq) –lib (all the libraries used by the solution: ninject or autofac) –src —app (sourcefiles) —test (unittests) solutionfile.sln build.csproj 符号“ – ”标记目录。 我认为在这些东西上建立一个好的结构是非常重要的。 您应该能够从源代码控制系统获取源代码,然后在不打开Visual Studio或安装任何第三方库的情况下构建解决方案。 有什么想法吗?

为什么Add-Migration有时会创建重复的迁移?

我在entity framework版本5中遇到代码首次迁移时遇到的奇怪问题。有时,由于挂起的更改, Update-Database失败,但Add-Migration命令仅生成迁移,其中包含上次迁移中已包含的数据库更改,并且数据库是最新的日期。 因此,我希望新的迁移是空的。 Add-Migration如何检测到哪些更改? 它似乎不使用数据库作为源。

TFS API:GetLocalWorkspaceInfo始终返回null

在我的一台机器上,我从任何GetLocalWorkspaceInfo调用中获得null的返回值。 对于这个简单的程序,我已经孤立到问题甚至失败了: namespace WorkstationTest { using Microsoft.TeamFoundation.VersionControl.Client; class Program { static void Main() { string workspaceLocalPath = @”C:\Dev”; var info = Workstation.Current .GetLocalWorkspaceInfo(workspaceLocalPath); // info is always null here } } } 我已经检查过: 完全相同的代码以我们应该的方式在我的其他机器上运行。 我已经validation我在C:\Dev有一个工作区 我创建了一个新工作区并在另一个目录中,并更改了代码中的workspaceLocalPath变量以匹配。 我已经查阅了文档 , 该文档声明if the path is not in a workspace中,返回值将为null。 从上图中,路径应位于工作区中。 然而,一切似乎都表明这应该有效。 有什么我可以失踪的吗?

是否有可能欺骗此WindowsIdentity代码使用错误的用户?

TL; DR可以欺骗WindowsIdentity的Token属性(例如someIdentity.Token )中包含的用户令牌,以便: var validated = new WindowsIdentity(someIdentity.Token); …将返回一个声称代表用户的实例,该用户实际上已经过身份validation,但IsAuthenticated设置为true ,有效.Name和.User属性等? 下面我对此进行了一些界定; 它可能不可能完全欺骗。 全文: 在这个答案中 , Damien_The_Unbeliever巧妙地certificate了我的一些代码可能被欺骗,相信它在WindowsIdentity实例中没有有效的身份validation用户。 简而言之,我的代码假设如果Thread.CurrentPrincipal.Identity是WindowsIdentity一个实例并且IsAuthorized是true ,它代表一个经过身份validation的用户,我可以依赖.User的SID: WindowsIdentity identity = Thread.CurrentPrincipal == null ? null : Thread.CurrentPrincipal.Identity as WindowsIdentity; if (identity != null && identity.IsAuthenticated && !identity.IsAnonymous) { // …use and trust the SID in identity.User, the // username in identity.Name, etc…. } (这个代码使用线程而不是WindowsIdentity.GetCurrent()是有原因的。) […]