草庐IT

弱引用

全部标签

c# - 在 C# 中是否应该始终保留对正在运行的 Thread 对象的引用?

或者可以这样做吗:newThread(newThreadStart(delegate{DoSomething();})).Start();?我似乎记得在这种情况下,Thread对象会被垃圾回收,但底层操作系统线程会继续运行,直到传递给它的委托(delegate)结束。我基本上是在寻找ThreadPool功能,但不希望线程成为后台线程(即我希望它们使应用程序保持事件状态)。更新:根据Jason的说法,CLR在运行时实际上保留了对Thread对象的内部引用,因此在线程退出之前不会对其进行垃圾回收。 最佳答案 我一般发现,如果我需要像你例

c# - 获取所有引用程序集的路径

如何获取当前正在执行的程序集引用的所有程序集的路径?GetReferencedAssmblies()给我AssemblyName[]。我如何从那里到达它们的加载位置? 最佳答案 在加载程序集之前您无法知道。程序集解析算法很复杂,您无法可靠地预先猜测它会做什么。调用Assembly.Load(AssemblyName)重写将为您提供对程序集的引用,其Location属性会告诉您需要什么。但是,您真的不想预先加载程序集,在JIT编译器执行它之前。它效率低下,出现问题的可能性不为零。例如,您可以在程序准备好响应之前触发AppDomain.

C#:在对象之间创建强引用,而无需一个引用另一个

假设我有2个类,Foo和Bar。Foo与Bar没有(也不可能有)关系。但是,我希望bar实例保持事件状态,只要它的foo实例保持事件状态。有什么方法可以做到这一点,而foo不会实际引用bar?谢谢,公园 最佳答案 看看ConditionalWeakTableClass.Enablescompilerstodynamicallyattachobjectfieldstomanagedobjects.它本质上是一个字典,其中的键和值都是一个弱引用,只要键还活着,值就会一直活着。例如,你可以定义一个ConditionalWeakTablet

c# - 在 WPF 中,由于空引用导致绑定(bind)失败时是否使用 FallbackValue?

我的View模型公开了一个名为MyList的列表,该列表可能为空或null。我有一个要基于此状态隐藏的元素。如果MyList为空或null,则应折叠该元素。如果它有元素,那么它应该被显示。这是我的DataTrigger:当MyList为null时,此DataTrigger会发生什么情况?它会使用FallbackValue还是会失败?这在某处记录了吗? 最佳答案 FallbackValue在绑定(bind)源路径未解析、转换器失败或值对属性类型无效时使用。如果返回null则不会使用它,除非null对属性类型无效。在这种情况下,Data

c# - .NET:我是否需要在异步下载时保留对 WebClient 的引用?

我在一段生产代码中使用了以下方法:privatevoidDownloadData(Uriuri){WebClientwebClient=newWebClient();DownloadDataCompletedEventHandlereh=null;eh=delegate(objectsender,DownloadDataCompletedEventArgse){webClient.DownloadDataCompleted-=eh;((IDisposable)webClient).Dispose();OnDataDownloaded();};webClient.DownloadData

c# - 未找到类型或命名空间 "are you missing assembly reference"而所有引用都正确

我正在尝试使用MSBuildWorkspaceclass.我的项目中有所有程序集引用。当我在对象浏览器中打开引用时,我看到了namespace和我尝试使用的类。但是在我接下来的using语句中,使用Microsoft.CodeAnalysis.MSBuild我得到一个Thetypeornamespacename'MSBuild'doesnotexistinthenamespace'Microsoft.CodeAnalysis'(areyoumissinganassemblyreference?)但有趣的是,语法高亮器识别类型名称,这是编译器的提示这是构建日志1>c:\windows\M

c# - 如何让不同的解决方案引用一个 resx 文件?

我有一个resx文件,我想从多个解决方案\项目中使用它,我不想在每个解决方案中都有本地副本(仅在编译时带一份副本)。有什么办法吗?因为当我将其添加为“添加现有文件”时,它会在本地复制一份副本。知道怎么做吗? 最佳答案 如果您使用的是.resx文件,您可能希望利用VisualStudio为.resx文件提供的自动生成代码功能。如果您在多个项目中包含一个.resx文件,那么您可能希望让每个项目自动生成自己的代码。您可能会这样做,因为您希望对某些项目使用不同的代码生成器(ResXCodeFileGenerator与GlobalResour

c# - WPF:在代码隐藏中引用应用程序范围的资源

我已经制作了我自己的自定义转换器,给定一个字符串返回一个Brush。现在我能够返回常量画笔,例如Brushes.Red等,但我真的想使用我在应用程序范围的资源中定义的自己的颜色。如何从我自己的自定义转换器类中引用应用程序范围的资源?我会使用FindResource但正如我所说,这是来self自己的转换器类,而不是窗口或控件。 最佳答案 如果这些已在您的应用程序中定义,您可以使用Application.Current.FindResource()按名称查找它们。 关于c#-WPF:在代码隐

c# - 有没有办法防止某些引用被包含在项目中?

基本上,我想做一些预防性维护。我希望避免将某些第三方库作为引用包含在某个项目中。有没有一种方法可以指定项目禁止哪些引用?我要保护的项目是一个类库,我希望它具有来自一组非常特定的第三方库的功能。该类库在其他解决方案中用于实现通用数据访问功能,因此如果引用了这些第三方库,则也需要它们。目的是让那个项目只是一个数据访问库,并保持“包”轻量级。 最佳答案 我在一个大型开发团队工作,所有人都在开发相同的软件,并且遇到了类似的问题。我们在大型domain-drivendesign工作(DDD)架构具有许多不同的限界上下文,并且不希望人们在上下文

c# - 为什么 .net 4.0 项目不能引用 4.5 程序集?

我正在开发一个针对.NET4.0的项目,现在我需要引用一个针对.NET4.5构建的第三方dll。visualstudio好像不接受?为什么?VS显示当前上下文中不存在dll名称。 最佳答案 因为你引用的是高版本。微软可以向后兼容,但不是“future兼容”。您需要将整个项目转换为更高版本,以便能够使用该二进制文件。不知道您在谈论什么技术,但如果是asp.net,请考虑在vNext中您可以在服务器上部署您自己的云clr版本。因此,您可能有2个版本的应用,一个针对4.5,另一个针对4.0。IntroducingvNext.如果这与您有关