草庐IT

Tread多线程

全部标签

c# - WebClient 在哪个线程上引发事件?

我找不到任何指定WebClient在哪个线程上引发其事件的文档。我进行了一些测试并确定了以下内容:如果从UI线程(比如从事件处理程序)调用,事件处理程序将在该线程上执行。作为测试,我在调用OpenReadAsync之后添加了一个无限循环。从未调用事件处理程序。如果没有UI线程,就像在控制台应用程序中一样,事件处理程序将在线程池线程上执行。在这种情况下,如果我想为应用程序的其余部分提供一些结果,就必须注意线程问题。是否在任何地方记录了这种行为?我什么也没找到。关于C#的新异步功能,我有基本相同的问题-最终,必须执行异步代码。当没有UI线程时,这是否也会生成一个线程池线程?反过来,这是否需

c# - 线程还是非线程

我正在构建一个相当简单的应用程序,它执行几个单独的HTTPWebRequests,每个都有自己的计时器。我不太可能需要同时运行3个以上的单独请求。如果一个TimerTick在另一个HTTPWebRequest正在进行时触发,那么TimerTick触发的事件会发生什么?我应该添加线程吗? 最佳答案 答案几乎总是——不,不要仅仅因为可以就使用线程。考虑先进行异步调用,因为这样更容易编写正确的代码。如果您需要额外的参数,它可能会更有效地使用资源(因为线程不是无限的资源)。链接:HowtouseHttpWebRequest(.NET)asy

c# - 是否将线程设置为背景

我需要解释一下我在这个网站上得到的一些建议。我正在做一个时事通讯发送应用程序,我的邮件在一个单独的线程中发送,所以这个过程不会减慢整个网站的速度。一些人建议我将线程的IsBackground属性设置为true。我这样做了,但也很好奇它的作用,所以我用谷歌搜索了一下。事实证明,将IsBackground属性设置为true表示“如果在该线程仍在运行时进程关闭是可以的。”。或者正如微软所说,“任何剩余的后台线程都已停止且未完成。”我不知道我是不是理解错了,但是,将IsBackground属性保留为false不是更好,这样生成的线程就可以完成与主线程有关的工作吗?

c# - 为什么 SocketAsyncEventArgs 的 Completed 回调经常在新创建的线程中执行,而不是使用有界线程池?

我有一个简单的客户端应用程序,它以低吞吐量从网络接收字节缓冲区。这是代码:privatestaticreadonlyHashSet_capturedThreadIds=newHashSet();privatestaticvoidRunClient(Socketsocket){vare=newSocketAsyncEventArgs();e.SetBuffer(newbyte[10000],0,10000);e.Completed+=SocketAsyncEventsArgsCompleted;Receive(socket,e);}privatestaticvoidReceive(Soc

c# - 为什么跨线程以这种方式工作?

已解决看来Oliver是对的。经过几次尝试,我得到了异常,并且在Debug模式下我肯定得到了它。所以这一切都与时间有关。您还应该查看Matthewwattsons的回答;)例子首先,一个小例子可以解释我的困惑。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Threading;n

c# - Regfree COM 事件从其他线程失败

我有一个COM可见.NET类,它公开事件并从VB6中使用。在过去的几天里,我一直试图让它与regfreeCOM一起工作,但没有成功。当从原始线程触发事件时,VB6事件以regfree模式运行。VB6事件在注册类型库时从另一个线程触发时运行。(regasm/tlb/codebase后跟regasm/codebase/unregister,后者不会注销tlb)当在regfree模式下从另一个线程触发时,它会抛出异常,因此永远不会执行VB6事件代码。System.Reflection.TargetException:Objectdoesnotmatchtargettype.atSystem.

c# - 多线程应用程序中无锁的延迟加载

如果两个线程同时读取这个属性会怎样?publicstaticHugeTypeHugeType{get{if(tenderCache==null){tenderCache=Config.Get("HugeType",null);}returntenderCache;}}我的对象是只读的,如果创建两个实例并不重要。在任何情况下我都应该加锁吗? 最佳答案 因为没有同步,初始化方法可能会被调用很多次,即使其他线程已经完全完成初始化(由于缺少内存屏障)也可能如此。如果您不关心多次执行初始化操作并且无论调用多少次它总是返回相同的正确值,即使同时

c# - 为什么这个赋值不是线程安全的?

我一直在阅读JosephAlbahari关于线程的这本书:http://www.albahari.com/threading/在第2部分中,我找到了这个示例:http://www.albahari.com/threading/part2.aspx#_When_to_Lock这是前面提到的例子:classThreadUnsafe{staticint_x;staticvoidIncrement(){_x++;}staticvoidAssign(){_x=123;}}线程安全版本:classThreadSafe{staticreadonlyobject_locker=newobject();

c# - 从 ProcessThreadCollection 按名称获取正在运行的线程

在搜索StackOverflow问题和一些谷歌搜索后,我仍然没有得到它。我知道您可以使用“Thread.isAlive()”方法检查单个线程是否正在运行,但我想检查特定的“FooThread”是否仍在当前进程的所有正在运行的线程之间运行,并且如果没有,调用启动它的方法。//somewhereinthecode,onanotherProject/DLLinsidesolutionprivatevoidFooThreadCaller(){Actionact=()=>fooFunction();Threadt=newThread(newThreadStart(act));t.Name="Fo

c# - .NET 的 ConcurrentDictionary 的哪些成员是线程安全的?

System.Collections.Concurrent.ConcurrentDictionary的MSDN文档说:ThreadSafetyAllpublicandprotectedmembersofConcurrentDictionaryarethread-safeandmaybeusedconcurrentlyfrommultiplethreads.However,membersaccessedthroughoneoftheinterfacestheConcurrentDictionaryimplements,includingextensionmethods,arenotgua