草庐IT

as-needed

全部标签

c# - Windows 服务 : OnStart loop - do I need to delegate?

我有一个Windows服务,它每n秒扫描一次文件夹以查找更改。尝试启动时出现“服务未及时响应启动命令”。我在OnStart中设置了一个循环,如下所示:publicvoidOnStart(string[]args){while(!_shouldExit){//DoStuff//RepeatThread.Sleep(_scanIntervalMillis);}}这是导致错误的原因吗?我应该委托(delegate)这个方法吗? 最佳答案 OnStart应该只开始工作;它不负责这样做。这通常意味着产生一个新线程来完成实际工作。预计OnSta

C#/.NET : Detect whether program is being run as a service or a console application

这个问题在这里已经有了答案:AmIRunningasaService(13个答案)关闭7年前。我有一个C#/.NET程序,它既可以作为控制台应用程序运行,也可以作为服务运行。目前我给它一个命令行选项来作为控制台应用程序启动,但我想避免这种情况。是否可以通过编程方式检测我的程序是否作为服务启动?如果它是纯Win32,我可以尝试使用StartServiceCtrlDispatcher作为服务启动,如果它返回ERROR_FAILED_SERVICE_CONTROLLER_CONNECT,则返回到控制台,但是System.ServiceProcess.ServiceBase.Run()如果它失

c# - 转换通用类型 "as T"同时强制执行 T 的类型

我想我在这里错过了一个技巧,不敢相信我以前从未这样做过。但是,如何使用as关键字转换泛型类型?[Serializable]publicabstractclassSessionManagerwhereT:ISessionManager{protectedSessionManager(){}publicstaticTGetInstance(HttpSessionStatesession){//EnsurethereisasessionIdif(UniqueId==null){UniqueId=Guid.NewGuid().ToString();}//Gettheobjectfromsess

c# - 在 C# 中使用 "is"后跟 "as"而不是 "as"后跟 null 检查有什么意义?

在阅读C#代码时,我发现了一个相当奇怪的片段:if(whateverisIDisposable){(whateverasIDisposable).Dispose();}我宁愿希望这样做是这样的:if(whateverisIDisposable){//check((IDisposable)whatever).Dispose();//cast-won'tfail}或者像这样:IDisposablewhateverDisposable=whateverasIDisposable;if(whateverDisposable!=null){whateverDisposable.Dispose()

c# - 为什么我不能将 'as' 与被限制为接口(interface)的泛型类型参数一起使用?

在下面的示例中(仅用于演示目的),如果T不受类约束,则此转换:varret=objectAasT;..将导致以下编译错误:Thetypeparameter'T'cannotbeusedwiththe'as'operatorbecauseitdoesnothaveaclasstypeconstraintnora'class'constraint.我不明白为什么我不能这样做。由于我已将T约束为接口(interface)IObject,因此编译器应该知道T必须是接口(interface)类型并且as操作应该是有效的。publicinterfaceIObject{stringId{get;se

c# - 提供了 XmlNamespaceManager,但仍然得到 "Namespace Manager or XsltContext needed"

我正在尝试阅读以下内容并在其中选择一个节点.XmlDocumentdocument=newXmlDocument();document.Load(Server.MapPath("order.xml"));XmlNamespaceManagermanager=newXmlNamespaceManager(document.NameTable);manager.AddNamespace("ns1","http://xxxxxxSomeURLXXXX");query="/ns1:OrderInfo/pricing";XmlNodeListnodeList=document.SelectNod

c# - variable = null as "object destroying"是从哪里来的?

我在许多不同的公司处理用各种版本的.NET编写的许多遗留系统,我一直在寻找以下模式的示例:publicvoidFooBar(){objectfoo=null;objectbar=null;try{foo=newobject();bar=newobject();//Codewhichthrowsexception.}finally{//Destroyingobjectsfoo=null;bar=null;}}对于了解内存管理在.NET中如何工作的任何人来说,这种代码是不必要的;垃圾收集器不需要您手动分配null来告诉旧对象可以被收集,分配null也不需要指示GC立即收集该对象。这种模式只

c# - Eric Lippert 所说的 "you need to know what the base class is to determine what the base class is"是什么意思?

我刚刚读了EricLippert的这篇有趣的文章,Top10WorstC#Features.在接近尾声时他说:Therulesforresolvingnamesaftertheaforementionedcolonarenotwellfounded;youcanendupinsituationswhereyouneedtoknowwhatthebaseclassisinordertodeterminewhatthebaseclassis.冒号指的是继承运算符(例如Dog:Animal)。埃里克指的是什么情况?谁能提供代码示例? 最佳答案

c# - 我只能用 "as"转换一个逆变委托(delegate)

我正在尝试转换一个逆变委托(delegate),但出于某种原因我只能使用“as”运算符来完成。interfaceMyInterface{}delegatevoidMyFuncType(InTypeinput);classMyClasswhereT:MyInterface{publicvoidcallDelegate(MyFuncTypefunc){MyFuncTypecastFunc1=(MyFuncType)func;//ErrorMyFuncTypecastFunc2=funcasMyFuncType;MyFuncTypecastFunc3=funcisMyFuncType?(My

c# - 属性与字段 : Need help grasping the uses of Properties over Fields

首先,我已经通读了有关该主题的一系列帖子,但由于我对封装和字段修饰符(私有(private)、公共(public)等)的理解,我觉得自己没有掌握属性。我学到的C#的主要方面之一是通过使用封装在代码中保护数据的重要性。我“认为”我理解这是因为使用修饰符(私有(private)、公共(public)、内部、protected)的能力。然而,在了解了属性之后,我在理解C#中不仅属性用途,而且数据保护的整体重要性/能力(我理解为封装)方面都感到困惑。更具体地说,当我接触到C#中的属性时,我读到的所有内容都是您应该尽可能使用它们代替字段,因为:1)它们允许您在无法直接访问字段时更改数据类型。2)