草庐IT

多线程、Handler机制、ThreadLocal

全部标签

c# - 如何在多个线程之间进行通信?

我正在为另一个程序编写一个插件,该程序使用native程序打开一系列文件以从中提取一些数据。我遇到的一个问题是这个过程需要很长时间,我想防止用户界面挂起。另外,我还想让用户能够在流程完成之前取消该流程。过去,我曾为此类事情使用过后台工作程序,但在这种情况下,我认为BackgroundWorker不会起作用。要通过我正在使用的API创建插件,可以通过从IAPICommand接口(interface)继承来创建自定义命令。该接口(interface)包括一个Execute(Applicationapp)方法。然后实例化该类,当用户在程序中调用自定义命令时,程序将调用Execute()方法。

c# - 如何使用 log4net 使用 Threadpool 线程记录正确的上下文?

我试图找到一种方法来从一堆线程中记录有用的上下文。问题是很多代码是在通过线程池线程到达的事件上处理的(据我所知),因此它们的名称与任何上下文无关。这个问题可以用下面的代码来演示:classProgram{privatestaticreadonlylog4net.ILoglog=log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);staticvoidMain(string[]args){newThread(TestThis).Start("ThreadA")

c# - C#++ 运算符在 foreach 循环中是否成为线程安全的?

最近我从VB转到C#,所以我经常使用C#到VB.NET的转换器来了解语法差异。在将next方法转移到VB时,我注意到一件有趣的事情。C#原代码:publicboolExceedsThreshold(intthreshold,IEnumerablebools){inttrueCnt=0;foreach(boolbinbools)if(b&&(++trueCnt>threshold))returntrue;returnfalse;}VB.NET结果:PublicFunctionExceedsThreshold(thresholdAsInteger,boolsAsIEnumerable(Of

C# Threading.Suspend 已过时,线程已被弃用?

在我的应用程序中,我正在通过另一个线程(GUI线程除外)执行文件读取。有两个按钮分别用于暂停和恢复线程。privatevoidBtnStopAutoUpd_Click(objectsender,EventArgse){autoReadThread.Suspend();}privatevoidBtnStartAutoUpd_Click(objectsender,EventArgse){autoReadThread.Resume();}但我正面临这个警告,Thread.Suspendhasbeendeprecated.PleaseuseotherclassesinSystem.Thread

c# - .NET 2.0 : File. AppendAllText(...) - 线程安全实现

作为无聊的好奇心练习,考虑以下简单的日志记录类:internalstaticclassLogging{privatestaticobjectthreadlock;staticLogging(){threadlock=newobject();}internalstaticvoidWriteLog(stringmessage){try{lock(threadlock){File.AppendAllText(@"C:\logfile.log",message);}}catch{...handleloggingerrors...}}}File.AppendAllText(...)周围是否需要锁

c# - 由于线程退出或应用程序请求,I/O 操作已中止

我的应用程序用作银行服务器的客户端应用程序。该应用程序正在发送请求并从银行获得响应。此应用程序通常运行良好,但有时TheI/Ooperationhasbeenabortedbecauseofeitherathreadexitoranapplicationrequest错误代码为995。publicvoidOnDataReceived(IAsyncResultasyn){BLCommonFunctions.WriteLogger(0,"In:-OnDataReceived",refswReceivedLogWriter,strLogPath,0);try{SocketPackettheS

c# - 具有多线程或任务的进程队列

我有一个电话消息应用程序,其中有很多消息需要处理。由于电话端口有限,所以消息将被先进先出处理。每条消息都有一个标志“Acknowledge”,指示已处理的消息。它当然被初始化为false。我想将所有消息放入一个队列,然后用多个线程或任务处理它们。publicclassMessageQueue{publicQueueMessageWorkItem{get;set;}publicMessagesMessage{get;set;}publicMessageQueue(){MessageWorkItem=newQueue();Message=newMessages();}publicvoidG

C# 线程和队列

这不是关于我可以或应该使用的不同方法来以最佳方式利用队列,而是关于我所看到的对我来说毫无意义的事情。voidRunner(){//membervariablequeue=Queue.Synchronized(newQueue());while(true){if(0这是在单线程中运行的:vart=newThread(Runner);t.IsBackground=true;t.Start();其他事件在其他地方“排队”。我所看到的情况是在一段时间后,Dequeue实际上会抛出InvalidOperationException,队列为空。这应该是不可能的,因为计数如何保证那里有东西,而且我很

c# - HttpContext.Current.Cache 是线程安全的吗?

请检查下面的代码:objDDLTable=HttpContext.Current.Cache["TestSet"]asHashtable;if(objDDLTable==null){objDDLTable=newHashtable();arrDDLItems=GetDropDownList("testDropDown");objDDLTable.Add("testDropDown",arrDDLItems);HttpContext.Current.Cache["TestSet"]=objDDLTable;}elseif(objDDLTable!=null&&!objDDLTable.C

c# - 如何在指定线程上执行代码

有哪些方法可以在指定线程上执行某些代码?所以让我们假设我有一个Thead和一个委托(delegate),我需要在这个线程上执行这个委托(delegate)。我该如何实现?我对SynchronizationContext等基础设施不感兴趣,我想知道手动实现此行为的方法。 最佳答案 要在指定线程上执行某些操作,您需要该线程来拉取工作,例如从同步队列中拉取工作。这可以是委托(delegate)或具有某种Execute()方法的已知类型。在UI框架的情况下,通常也可以将工作直接(或间接)添加到主线程(通过消息队列)——例如,Control.