草庐IT

Tread多线程

全部标签

c# - 异步线程安全从 MemoryCache 获取

我创建了一个使用.NETMemoryCache的异步缓存。这是代码:publicasyncTaskGetAsync(stringkey,Func>populator,TimeSpanexpire,objectparameters){if(parameters!=null)key+=JsonConvert.SerializeObject(parameters);if(!_cache.Contains(key)){vardata=awaitpopulator();lock(_cache){if(!_cache.Contains(key))//Checkagainbutlockedthist

c# - FileSystemWatcher 是否创建自己的线程?

我希望这项工作在不同的线程中完成,但我必须创建一个线程还是它在不同的线程中完成所有工作?喜欢:ThreadfileThread=newThread(()=>{FileWatcher=newFileSystemWatcher();FileWatcher.Created+=OnFileEvent;FileWatcher.Deleted+=OnFileEvent;FileWatcher.Renamed+=OnRenameEvent;FileWatcher.EnableRaisingEvents=true;});fileThread.Start(); 最佳答案

c# - 如何更改 .Net 中整个进程(而不仅仅是当前线程)的 CurrentCulture?

在某些情况下,我需要将进程的语言环境设置为en-US。我知道如何为当前线程执行此操作:System.Threading.Thread.CurrentThread.CurrentCulture=System.Globalization.CultureInfo.CreateSpecificCulture("en-US");但我的应用程序使用BackgroundWorkers进行一些处理,并且这些工作线程的语言环境似乎不受上述对其生成主线程的更改的影响。那么我如何才能为我的应用程序中的所有线程设置语言环境,而无需在每个线程中手动设置呢? 最佳答案

c# - 如何锁定在多个线程中使用的变量

我在这里问了一个很糟糕的问题Lockonavariableinmultiplethreads所以为了清楚起见,我将在这里提问,希望我能正确提问。classAcreatesinstanceofclassBhasmethodAthatcanupdate&usesclassB'smyVarhasmethodBthatcanupdate&usesclassB'smyVarclassBhasavariablemyVarmethodA和methodB都可以在单独的线程中运行(在主线程中调用)。我如何确保这是线程安全的? 最佳答案 使用lock关

c# - 线程不会在应用程序关闭时中止

我有一个应用程序在单独的Thread中执行一些后台任务(网络监听和读取)。然而,当我关闭应用程序(单击标题栏上的“x”按钮)时,线程似乎没有被终止/中止。那是因为主线程例程是while(true){...}吗?这里的解决方案是什么?我一直在寻找线程的一些“中断”标志作为“while”循环的条件,但没有找到。 最佳答案 最简单的方法是设置IsBackground线程的属性为真。这将阻止它保持应用程序打开。当所有非后台线程终止时,应用程序终止。停止线程的一种更可控的方法是向它发送一条消息以彻底关闭并确保它在让您的主线程终止之前已终止。我

c# - List<T>.AddRange() 线程安全吗?

我可以在不锁定的情况下从多个线程安全地调用List.AddRange(r)吗?如果不是,我会遇到什么样的麻烦? 最佳答案 否,itsdocumentation没有说它是线程安全的,因此它不是。Publicstatic(SharedinVisualBasic)membersofthistypearethreadsafe.Anyinstancemembersarenotguaranteedtobethreadsafe.至于哪里会出错,想想AddRange(newItems)做了什么:检查内部数组是否有足够的空间如果不是:分配一个新数组将

c# - 调用线程无法访问此对象,因为另一个线程拥有它 - WPF

这个问题在这里已经有了答案:Thecallingthreadcannotaccessthisobjectbecauseadifferentthreadownsit[duplicate](4个答案)关闭8年前。我有通过套接字连接的硬件。我必须每5秒检查一次硬件是否已连接,由复选框指示。我实现了一个功能:privatestaticSystem.Timers.TimeraTimer;publicMainWindow(){InitializeComponent();client.BeginConnect(remoteEP,newAsyncCallback(ConnectCallback),cl

c# - 单例成员的线程安全使用

我有一个多个类使用的C#单例类。通过Instance访问Toggle()方法线程安全吗?如果是,根据什么假设、规则等。如果不是,为什么和我该如何解决?publicclassMyClass{privatestaticreadonlyMyClassinstance=newMyClass();publicstaticMyClassInstance{get{returninstance;}}privateintvalue=0;publicintToggle(){if(value==0){value=1;}elseif(value==1){value=0;}returnvalue;}}

c# - C# 中的多线程 NamePipeServer

你好我想使用.NET3.5中新增的NamedPipeServerStream进行命名管道通信。我想写多线程管道服务器。它是默认处理的还是我应该为此编写代码。我的管道服务器应该一次处理多个请求任何解决方案或代码? 最佳答案 您可以通过重复创建NamedPipeServerStream并等待一个连接,然后为该NamedPipeServerStream实例生成一个线程来编写多线程管道服务器。根据下面链接的.NETMSDN文档,您只能有254个并发客户端。对于Win32API,虽然您可以传递一个特殊值以获得基于系统资源的无限制。如下所述,M

c# - 什么是非线程安全?

有很多文章和讨论解释了为什么构建线程安全类是好的。据说如果多个线程访问例如同时一个领域,只能有一些不好的后果。那么,保持非线程安全代码的意义何在?我主要关注.NET,但我相信主要原因与语言无关。例如.NET静态字段不是线程安全的。如果它们默认是线程安全的,结果会怎样?(无需执行“手动”锁定)。使用(实际上默认)非线程安全有什么好处?我想到的一件事是性能(尽管更多是猜测)。很直观的是,当函数或字段不需要线程安全时,它不应该是。然而,问题是:为什么?线程安全只是您始终需要实现的额外代码量吗?在什么情况下我可以100%确定例如一个字段不会同时被两个线程使用? 最佳