Tag: multithreading线程

睡在一个混合的C#线程中

在这篇关于C#中线程的网络教程中,Joseph Albahari写道:“不要在汇集的线程中睡觉!” 你为什么不这样做? 它对性能的影响有多严重? (这不是我想要做的;我只是好奇。)

了解InvalidAsynchronousStateException事件

什么时候抛出InvalidAsynchronousStateException? 我有以下代码: control.InvokeRequired? control.Invoke(expression):expression(); 在一些随机的情况下,我得到InvalidAsynchronousStateException并且我的应用程序挂起,在做了一些阅读后,似乎是在创建control的线程完成时将抛出此exception。 它是否正确? 如果是这样的话,情况似乎并非如此,除非某些事情导致我的应用程序崩溃,这种exception只是后果? 这可能吗? System.ComponentModel.InvalidAsynchronousStateException:调用方法时发生错误。 目标线程不再存在。 System.Windows.Forms.Forvoke上的System.Windows.Forms.Control.WaitForWaitHandle(WaitHandle waitHandle)在System.Windows.Forms.Control.MarshaledInvoke(Control caller,Delegate方法,Object [] args,布尔同步)中的System.Windows.Forms.Control.WaitForWaitHandle(WaitHandle waitHandle)委托方法,Object [] args)位于c:\ Optimus \ Desktop \ Framework \中Optimus.Desktop.Framework.Spring.Aspects.UIThreadInterceptor.Invoke(IMethodInvocation调用)的System.Windows.Forms.Control.Invoke(Delegate方法) Spring \ Aspects \ UIThreadInterceptor.cs:Spring.Aop.Framework.AbstractMethodInvocation.Proceed()的第22行,Spring.Aop.Framework.DynamicProxy.AdvisedProxy.Invoke(对象代理,对象目标,类型targetType,MethodInfo targetMethod,MethodInfo proxyMethod,在Object.ComponentModel.Component.Finalize()的InheritanceAopProxy_4fda07e8828744839065a154b30915ee.Dispose(布尔处理)中的Object [] args,IList拦截器) 顺便说一句,我已经检查了这个答案并没有澄清我的疑问 – > 函数中的InvalidAsynchronousStateException检查控件是否需要调用

C#中Thread.Sleep的替代方案?

我有一个代码,在运行时,它按顺序执行一系列行。 我想在两者之间添加一个暂停。 目前,我有这样的 //do work Thread.Sleep(10800000); //do work 然而,这会冻结软件,我认为这是因为睡眠时间过长。 我在网上搜索,发现另一个名为Timer的工作。 有人可以给我看一个Timer的示例代码,它的工作原理就像Thread.sleep一样吗? 先感谢您。 编辑:我需要软件等待3个小时才能继续执行其余的代码。 该软件用于与机器通信,我不能让其余的代码在等待3个小时时执行。

ThreadPool.QueueUserWorkItem中的最大排队元素

我将最大线程设置为10.然后我使用ThreadPool.QueueUserWorkItem添加了22000任务。 运行该程序后很可能并非所有22000任务都已完成。 有多少任务可以排队等待可用线程?

ThreadPool最大线程

我在.NET的ThreadPool(.NET 4)上遇到了一些麻烦。 我已经读过默认情况下.NET每个处理器有25个线程的限制,但根据SO和其他地方的论坛post,我可以用下面的代码增加限制。 void SetThreads(int threads) { ThreadPool.SetMaxThreads(threads, threads); ThreadPool.SetMinThreads(threads, threads); } 但是,当我将上面的内容设置为某个任意高的数字(例如2000)和队列~1000个项目时,我仍然只运行~33个线程(.NET CLR需要约5个线程),而ThreadPool.GetAvailableThreads()返回1971剩下的线程。 为什么上面的代码不起作用?

委托.BeginInvoke和在C#中使用ThreadPool线程之间的区别

在C#中,使用委托异步地执行某些工作(调用BeginInvoke())和使用ThreadPool线程之间有任何区别,如下所示 public void asynchronousWork(object num) { //asynchronous work to be done Console.WriteLine(num); } public void test() { Action myCustomDelegate = this.asynchronousWork; int x = 7; //Using Delegate myCustomDelegate.BeginInvoke(7, null, null); //Using Threadpool ThreadPool.QueueUserWorkItem(new WaitCallback(asynchronousWork), 7); Thread.Sleep(2000); } 编辑: BeginInvoke确保线程池中的线程用于执行异步代码,所以有什么区别吗?

抛出了System.OutOfMemoryException – WebClient.DownloadStringAsynch()

我正在编写一个可怜的勒芒负载测试器,我认为我正在正确管理我的资源(线程池)但是当我运行以下代码时,我在调用WebClient.DownloadStringAsynch时得到一个OutOfMemoryException。 使用.net4.0但可以移动到4.5。 问: 修复是什么? 我怎么能使用HttpWebRequest并发送asynch作为webclient的替代? 使用等待使用.net 4.5怎么样(与.net4如何管理带有异步调用的线程有什么不同? static void Main(string[] args) { System.Net.ServicePointManager.DefaultConnectionLimit = 200; while (true) { for (int i = 0; i < 100; i++) { Task.Factory.StartNew(LoadTestAsynchNET40); } Console.WriteLine("…………………….sleeping…………………………."); Thread.Sleep(2); } } static void LoadTestAsynchNET40() { string url = "http://mysrv.com/api/dev/getthis?stuff=thestuff" + "&_=" + DateTime.Now.Ticks; // <— somtimes throws here… using (var client = […]

在IIS应用程序上使用tasks / ThreadPool(asp .net)

我们在iis 7上有一个asp.net应用程序。我们需要创建一个异步进程来进行计算(使用Web服务)而不是让客户端等待,我们使用ThreadPool来做到这一点(我更喜欢Tasks但我是服务器旁边的家伙)。 我的问题是: 1.如果在iis上使用线程池,是从客户端还是从OS获取iis池中的线程? 2.你会使用什么任务或ThreadPool(任务给你更多我知道,但UI人员喜欢池)。 坦克

在所有后台线程池线程完成时得到通知

我有一个场景,当我用ThreadPool启动3..10个线程。 每个线程都完成它的工作并返回ThreadPool。 所有后台线程完成后,主线程中可以通知哪些选项? 目前我正在使用一种自行开发的方法,为每个创建的线程递增一个变量,并在后台线程即将完成时递减它。 这很好用,但如果有更好的选择,我很好奇。

如何在.NET 3.5中重用线程

我有一个处理大块信息的子程序。 为了利用整个CPU,它将工作分为单独的线程。 完成所有线程后,它就完成了。 我读到创建和销毁线程会占用大量开销,所以我尝试使用线程池,但实际上运行速度比创建自己的线程慢。 如何在程序运行时创建自己的线程,然后继续重用它们? 我见过有些人说它无法完成,但是线程池是这样做的,所以它必须是可能的,对吧? 以下是启动新线程/使用线程池的代码的一部分: //initialization for threads Thread[] AltThread = null; if (NumThreads > 1) AltThread = new Thread[pub.NumThreads – 1]; do { if (NumThreads > 1) { //split the matrix up into NumThreads number of even-sized blocks and execute on separate threads int ThreadWidth = DataWidth / NumThreads; if (UseThreadPool) //use […]