草庐IT

线程id

全部标签

c# - 如何检测我们是否在 UI 线程上?

为了论证,将UI线程视为已调用Application.Run()或对其调用的其中一个重载并且正在运行事件消息循环的线程。有没有办法检测我们当前是否在这样的线程上执行?我想要这个的原因是因为我有一个具有长期运行的私有(private)函数的类。这个类本身已经是多线程的,并且这个类的用法是这样的,它可以从UI或后台线程进行处理。这个功能也属于这个网。但我不希望它阻塞UI线程。所以我想检测我是否在UI线程上运行,如果是,则将函数调用fork到后台线程(可能是ThreadPool,但这不是本次讨论的问题)。这是完全正常的,但后台线程可能依赖于函数的输出,因此对它们进行阻塞更好,而UI线程以更“

c# - 让多个线程工作并等待所有线程完成的最佳方法是什么?

我正在编写一个简单的应用程序(同样适用于我的妻子:-P),它可以对可能存在的大量图像进行一些图像处理(调整大小、时间戳等)。所以我正在编写一个可以同步和异步执行此操作的库。我决定使用Event-basedAsynchronousPattern.使用此模式时,您需要在工作完成时引发一个事件。这是我不知道什么时候完成的地方。所以基本上,在我的DownsizeAsync方法(缩小图像尺寸的异步方法)中,我正在做这样的事情:publicvoidDownsizeAsync(string[]files,stringdestination){foreach(varnameinfiles){strin

c# - 静态代码如何与多线程一起运行?

我正在阅读Threadingfromwithinaclasswithstaticandnon-staticmethods我也有类似的情况。我有一个从资源中提取数据并根据数据创建一些运行时对象的静态方法。staticclassWorker{publicstaticMyObjectDoWork(stringfilename){MyObjectmo=newMyObject();//...doessomeworkreturnmo;}}该方法需要一段时间(在本例中它正在读取5-10mb文件)并返回一个对象。我想采用这种方法并在多线程情况下使用它,这样我就可以一次读取多个文件。撇开设计问题/准则不

c# - Try/Catch 和线程

我知道为什么,但我想问一下是否有人很好地理解为什么线程内引发的异常从未被启动它的代码捕获。下面是一些非常简单的代码来演示我的意思:usingSystem;usingSystem.Collections.Generic;usingSystem.Threading;namespaceTestCrash{classProgram{privatestaticvoidCrash(objectcontrol){AutoResetEventare=(AutoResetEvent)(((object[])control)[0]);are.Set();thrownewException("Burnbab

c# - 通过将控件的 ID 属性设置为 "itemPlaceholder"来指定项目占位符

我只有一个“Default.aspx”页面和一个ListView控件。为什么我会收到此错误。以前从未发生过“必须在ListView'ListView1'上指定项目占位符。通过将控件的ID属性设置为“itemPlaceholder”来指定项目占位符。项目占位符控件还必须指定runat="server"。”这样做甚至没有帮助现在它抛出这个异常“必须在ListView'ListView1'上指定项目占位符。通过将控件的ID属性设置为“PlaceHolder1”来指定项目占位符。项目占位符控件还必须指定runat="server"" 最佳答案

c# - 让当前线程休眠

我在一个线程(不是主线程)中有一个工作单元。在某些情况下,我想让这个线程休眠10秒。Thread.Sleep(10000)是最节省资源的方法吗? 最佳答案 IsThread.Sleep(10000)themostresourceefficientwaytodothis?是的,因为它不是忙等待而是放弃CPU。但这是在浪费一个Thread。您不应该将其扩展到许多休眠线程。 关于c#-让当前线程休眠,我们在StackOverflow上找到一个类似的问题: https

c# - 以线程安全的方式添加到 Parallel.ForEach 循环中的列表

我有一些代码在名为ListofObjects的obj对象列表上像这样工作:ListNewListofObjects();Parallel.ForEach(ListofObjects,obj=>//DosomeoperationshereonobjtogetanewobjNewListofObjects.Add(newobj););现在我退出了Parallel.ForEach循环,我想对NewListofObjects进行操作。但是,当我尝试执行以下操作时出现此错误:“尝试读取或写入protected内存。这通常表示其他内存已损坏”。这是因为我的NewListofObjects.Add(

c# - .net 中的线程安全队列(列表)

我需要为要添加到lucene索引的项目创建一个线程安全列表。下面的线程安全吗?publicsealedclassIndexQueue{staticreadonlyIndexQueueinstance=newIndexQueue();privateListitems=newList();privateIndexQueue(){}publicstaticIndexQueueInstance{get{returninstance;}}privateobjectpadlock=newobject();publicvoidAddItem(stringitem){lock(padlock){ite

c# - 如何证明 Dictionary 的 TryGetValue 的双重检查锁定模式不是线程安全的

最近我看到一些C#项目在Dictionary上使用双重检查锁定模式。像这样:privatestaticreadonlyobject_lock=newobject();privatestaticvolatileIDictionary_cache=newDictionary();publicstaticobjectCreate(stringkey){objectval;if(!_cache.TryGetValue(key,outval)){lock(_lock){if(!_cache.TryGetValue(key,outval)){val=newobject();//factorycon

c# - 按 id 从通用列表中删除对象

我有一个这样的域类:publicclassDomainClass{publicvirtualstringname{get;set;}publicvirtualIListNotes{get;set;}}我将如何从IList中删除一个项目??如果它是一个列表,我就可以做到,但它必须是IList因为我将Nhibernate用于我的持久层。理想情况下,我希望在我的域类中使用这样的方法:publicvirtualvoidRemoveNote(intid){//removethenotefromthelisthereListnotes=(List)Notesnotes.RemoveAll(dele