草庐IT

$安全工具

全部标签

c# - 调试器可视化工具和 "Type is not marked as serializable"

我正在尝试创建一个调试器可视化工具,它会显示任何Control的控件层次结构。它已完成,但我收到异常“类型未标记为可序列化”。我该如何克服呢?控件是.NETWindows窗体框架类型,我无法将其标记为可序列化。 最佳答案 您还需要实现VisualizerObjectSource执行自定义序列化。例子:publicclassControlVisualizerObjectSource:VisualizerObjectSource{publicoverridevoidGetData(objecttarget,StreamoutgoingD

c# - 为什么 DateTime.Now 需要线程安全?

我正在阅读Joe的AlbahariC#threadingtutorial:作者解释了为什么DateTime.Now需要线程安全:Wrappingaccesstoanobjectaroundacustomlockworksonlyifallconcurrentthreadsareawareof—anduse—thelock.Thismaynotbethecaseiftheobjectiswidelyscoped.Theworstcaseiswithstaticmembersinapublictype.Forinstance,imagineifthestaticpropertyontheD

C# 单例线程安全

我有一个类似这样的单例类publicclassSingleton{privatestaticSingletonm_instance;privateTimerm_timer;privatestaticListm_cacheObjects;privateSingleton(){m_cacheObjects=newList();m_timer=newTimer(MyTimerCallBack,null,TimeSpan.FromSeconds(60),TimeSpan.FromSeconds(60));}publicstaticSingletonInstance{get{if(m_insta

c# - 停止正在运行的线程的安全方法是什么?

我有一个包含IronPython脚本执行的线程。出于某种原因,我可能需要随时停止该线程,包括脚本执行。如何做到这一点?第一个想法是Thread.Abort(),但它被认为是邪恶的... 最佳答案 Whatisasafewaytostoparunningthread?将线程放在自己的进程中。当您希望它停止时,终止进程。这是终止线程的唯一安全方法。中止线程会严重破坏进程的稳定性并丢失用户数据。如果您真的、真的需要能够杀死一个可以做任何事情的线程,那么就没有办法避免“丢失用户数据”的情况。避免调用中止的进程不稳定的唯一方法是使它们完全不同

c# - 如何将扩展的 WinForms 控件放在工具箱上

我计划通过以下方式向TextBox添加功能:publicclassTextBoxExt:TextBox{protectedoverridevoidOnKeyPress(KeyPressEventArgse){base.OnKeyPress(e);}}问题是我们如何使用这个TextBoxExt?有没有办法把这个类放到工具箱上,这样我们就可以把它拖放到窗体上?如果没有,使用TextBoxExt的最佳方式是什么? 最佳答案 使用TextBoxExt构建您的项目,确保它编译正常。在你想要TextBoxExt的窗体上,打开工具箱,右击并选择“

c# - 在代码中交换方程式的工具

我知道这对某些人来说可能是微不足道的,但是当用C#编程时,你有一个非常大的数据结构。我通常通过方程式进行赋值以在控件中设置值,然后再以相反的方式进行赋值。Control1.Text=data.value1;Control2.SelectedValue=data.value2;反转:data.value1=Control1.Text;data.value2=Control2.SelectedValue;我想知道是否有工具可以快速完成此操作。这是假设您有一组非常大的值。 最佳答案 您可以使用VisualStudio查找和替换来执行交换。

c# - 为 COM DLL 创建 .NET 包装器的工具?

是否有任何开源工具可以自动为COMDLL库生成.NET包装器? 最佳答案 在.NET中使用COM对象不需要包装器。在VisualStudio中,在解决方案资源管理器中右键单击您的项目名称,然后选择“添加引用”。任何已注册的COM对象都将列在COM选项卡中。只有在将.NET程序集用作COM对象时才需要互操作包装器,而不是像您在问题中描述的那样相反。 关于c#-为COMDLL创建.NET包装器的工具?,我们在StackOverflow上找到一个类似的问题: htt

c# - 证书安装安全警告解决方法?

我有一些C#4.0代码尝试将CA(.der编码)证书安装到当前(我的)用户的“受信任的根证书颁发机构”存储中。我的小控制台应用程序针对其他商店静默运行,但对于这家商店,会出现一个GUI弹出窗口“您即将安装来自证书颁发机构的证书......Windows无法验证该证书实际上来自......你要安装此证书吗?”这个消息框是个问题,因为它的想法是使用MSI自动部署应用程序,并在正确的位置默默地获取正确的证书。拥有模态框会扼杀自动化部署。如何在没有破坏部署的消息框的情况下完成此安装? 最佳答案 这听起来不合逻辑,但为了不发出警告,您不应将证

c# - 在单元测试中确定线程安全

我正在编写一个多线程应用程序,我也在尝试找出如何为其编写合适的单元测试。我认为这可能是关于如何最好地做到这一点的另一个问题。还有一个问题,我有一个像下面这样的类,知道它不是线程安全的,想在单元测试中证明它,但不知道如何去做:publicclassMyClass{privateListMyList=newList();publicvoidAdd(stringData){MyList.Add(Data);//Thisisnotthreadsafe!!}} 最佳答案 证明某些东西是线程安全的是棘手的——可能很难停止问题。您可以证明竞争条件

c# - .NET DateTime 线程安全吗

.NETDateTime线程安全吗?如果read操作返回不正确的值,我并不担心,我唯一担心的是:如果不同步,DateTime对象是否会损坏。 最佳答案 读取和写入DateTime字段不是原子的(至少在32位系统上)。如果您同时从多个线程分配同一个属性,您可能会破坏它。如果您从一个线程读取并从另一个线程写入,读取线程可能会获得损坏的值。从多个线程读取而同时没有写入线程是安全的。本质上,当同时从多个线程使用时,DateTime的两个32位半部分可能包含不同年龄的值。您可以混合使用两种写入方式。一个写的高32位部分,另一个写的低32位部分