Tag: .net 4.0

如何抑制由我​​无法更改的代码显示的对话框?

我有来自第三方的Inproc COM服务器。 如果它捕获特定类型的错误,我调用的函数之一将显示错误消息对话框。 问题是我正在尝试批量处理数据,而我使用的数据源导致错误对话框弹出很多。 如果它产生1000个对话框,这不会是一个问题,而是它会阻塞,直到您按OK才会返回该function。 如何禁止显示对话框,或以编程方式按OK? 这是一个调用堆栈的副本,​​因为它正在等待我按OK [管理到原生过渡] > System.Windows.Forms.dll!System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(System.IntPtr dwComponentID,int reason,int pvLoopData)Line 2198 + 0x1e bytes C# System.Windows.Forms.dll!System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(int reason,System.Windows.Forms.ApplicationContext context)Line 3422 + 0x1b bytes C# System.Windows.Forms.dll!System.Windows.Forms.Application.ThreadContext.RunMessageLoop(int reason,System.Windows.Forms.ApplicationContext context)Line 3306 + 0xc bytes C# System.Windows.Forms.dll!System.Windows.Forms.Application.Run(System.Windows.Forms.Form mainForm)第1495行+ 0x31字节C# UniversalDataImporter.exe!UniversalDataImporter.Program.Main()第18行+ 0x1d字节C# [原生于管理过渡] [管理到原生过渡] mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile,System.Security.Policy.Evidence assemblySecurity,string [] args)2023行+ 0x18字节C# Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()+ 0x27 bytes mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(对象状态)第68行+ 0x27字节C# mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object […]

从.net 4 c#中取消阻止文件

是否有可能从ac#程序中取消阻止从Internet下载的文件。 浏览互联网我已经了解到,信息是在包含当前区域信息的(NTFS)文件的替代流中写入的(值3来自互联网并被解释为被阻止)。 是否有管理的可能性来清除或更改文件的区域信息(解除阻止),或者是否存在托管复制function来复制没有区域信息的文件? 如果没有,我如何处理PInvoke但不包括外部程序集(我不允许在当前项目中执行此操作)。

System.Lazy 具有不同的线程安全模式

.NET 4.0的System.Lazy 类通过枚举LazyThreadSafetyMode提供三种线程安全模式,我将其概括为: LazyThreadSafetyMode.None – 不是线程安全的。 LazyThreadSafetyMode.ExecutionAndPublication – 只有一个并发线程将尝试创建基础值。 成功创建后,所有等待的线程将获得相同的值。 如果在创建期间发生未处理的exception,则将在每个等待的线程上重新抛出它,在每次后续尝试访问基础值时进行缓存和重新抛出。 LazyThreadSafetyMode.PublicationOnly – 多个并发线程将尝试创建基础值,但第一个成功将确定传递给所有线程的值。 如果在创建期间发生未处理的exception,则不会对其进行高速缓存,并且后续尝试访问基础值将重新尝试创建并可能成功。 我想要一个延迟初始化的值,它遵循稍微不同的线程安全规则,即: 只有一个并发线程将尝试创建基础值。 成功创建后,所有等待的线程将获得相同的值。 如果在创建过程中发生未处理的exception,它将在每个等待的线程上重新抛出,但它不会被缓存,后续尝试访问基础值将重新尝试创建并可能成功。 因此,与LazyThreadSafetyMode.ExecutionAndPublication的关键不同之处在于,如果创建时“先行”失败,可以在以后重新尝试。 是否存在提供这些语义的现有(.NET 4.0)类,还是我必须自己编写? 如果我自己滚动是否有一种聪明的方法可以在实现中重用现有的Lazy 以避免显式锁定/同步? NB对于一个用例,假设“创建”可能很昂贵并且容易出现间歇性错误,例如从远程服务器获取大量数据。 我不想进行多次并发尝试来获取数据,因为它们可能全部失败或全部成功。 但是,如果它们失败了,我希望以后能够重试。