【c# – 等待后台线程完成】教程文章相关的互联网学习教程文章

c# – 所有线程完成后设置属性值?【代码】

在我的应用程序中有三个线程,如:private Thread _analysisThread;private Thread _head2HeadThread;private Thread _formThread;每个线程以下列方式启动:if (_analysisThread == null || !_analysisThread.IsAlive) {_analysisThread = new Thread(() => { Analysis.Logic(match); });_analysisThread.Start(); }我有一个ListView,用户可以在其中选择一个项目,然后重新开始该线程,但我希望防止这种情况,因为每个线程内的方法都很...

c# – 当ThreadPool中的活动线程数大于ThreadPool.GetMinThreads()时启动任务【代码】

取自我以前的一个问题的答案(Task.Factory.StartNew starts with a great delay despite having available threads in threadpool):“It’s not the MAX worker threads value you need to look at – it’s theMIN value you get via ThreadPool.GetMinThreads(). The max value is theabsolute maximum threads that can be active. The min value is thenumber to always keep active. If you try to start a thread when then...

c# – 将多线程工作到库中有哪些策略?【代码】

我正在编写一个库来处理长期运行的任务,例如文件下载和处理大量文本.我想多线程化这个库,以便这些任务不会冻结使用它们的应用程序. 您是否有结构化方式或我应该使用/避免的特定课程的建议?我在考虑使用IAsyncResult接口:http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspx,或者也许是一些BackgroundWorkers.解决方法:so that these tasks won’t freeze up the applications that use them.如果这是您的目标,那么...

在“IsAlive”属性为false后,Join拒绝确认子线程已终止. C#【代码】

果壳:我从我的表单中启动一个线程,然后一段时间后使用它的Join方法.它终止但我的应用程序停留在Join上,并拒绝承认它已完成加入.什么会导致这种情况发生?我的线程是从我的表单上的一个按钮启动的,并尝试从同一表单上的第二个按钮加入. 更多信息:我有一个使用线程来完成通信和数字运算的应用程序.假设主窗体是父线程,第一个子节点是Child1.启动时,Child1与外部设备建立一些通信,并启动自己的2个子线程(Child2和Child3)来处理传入的...

c# – 我应该在自己的线程中运行每个插件吗?

在我的游戏中,用户可以加载自定义脚本.通常会加载50-100个脚本.每个脚本都通过其Update方法调用每个帧. >当脚本崩溃时,其他脚本不应受到影响.>脚本更新方法允许每帧最多运行1毫秒.所以我还需要能够中止冻结/没有及时反应的脚本. 我该怎么做?我认为每秒启动3000 – 6000个线程并不是最好的做法.一旦在循环中调用Update并等待16ms,我也无法启动线程,因为脚本需要与游戏同步.脚本依赖于每帧运行. 线程池是正确的选择吗?如果是这样...

如何在C#中正确多线程运行时调用的DLL【代码】

所有, 我希望编写一个插件.dll,由运行时调用的.NET应用程序使用/调用.我的.dll是一个WinForm并显示正在进行的(计算上昂贵的)操作.从主应用程序调用.dll是通过.NET System.Reflection调用的.我必须向调用应用程序提供NameSpace,Class和我想要调用的方法. 我想多线程我的.dll,以便它更友好的UI,我只是熟悉BackgroundWorkers. 编辑:扩展问题. 所以,我将.dll称为如下:if (classType != null) {if (bDllIsWinForm){classInst = Activa...

C#多线程的同步与通信【代码】

C#中使用lock和Monitor控制多线程对资源的使用,最常见的生产者和消费者问题就是多线程同步和通信的经典例子。了解C#多线程的同步与通信。 一、关于lock和Monitor lock可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其它线程必须等待。格式定义如下:lock(expression) statement_block expression代表要跟踪的对象,通常是引用。一般地,如果想保护一个类的实例,使用this;如果保...

c# – 线程安全的公共字符串【代码】

我有一个从DataTable中的数据设置的公共字符串,我正在寻找一个如何使其多线程安全的例子public string Server { get; set; }string Server = DT.Rows[0].ItemArray[0].ToString();这就是我所拥有的,当所有其他线程根据数据表中的数据设置其字符串Server时,我不认为这是安全的.解决方法:从您的评论到您的原始帖子,我认为您想要的是ThreadLocal 你会得到:// declared as: ThreadLocal<string> Server;// ... initialized by: Server...

c# – 在单独的线程中侦听控制台应用程序上的输入

我目前正在开发一个c#项目,它有一个Console.CancelKey EventHandler的事件处理程序.我遇到的问题是,如果用户按下Ctrl C来停止应用程序,事件不会被触发,因为我认为它太忙于处理事件的其他事情.如果应用程序安静,即无需做太多工作,则会捕获Ctrl C并运行该事件处理程序. 我假设我需要在一个单独的线程中监听事件处理程序,以便理解它,但我将如何进行此操作. 感谢您的任何帮助,您可以提供.解决方法:您可以尝试设置Console.TreatControlC...

C#的多线程机制探索(上)

一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程。什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的...

C#的多线程机制探索(下)

然后在下面这个类MonitorSample的Main()函数中我们要做的就是创建两个线程分别作为生产者和消费者,使用CellProd.ThreadRun()方法和CellCons.ThreadRun()方法对同一个Cell对象进行操作。public class MonitorSample{  public static void Main(String[] args)  {  int result = 0; file://一个标志位,如果是0表示程序没有出错,如果是1表明有错误发生  Cell cell = new Cell( );   //下面使用cell初...

C#中多线程中变量研究【代码】

今天在知乎上看到一个问题【为什么在同一进程中创建不同线程,但线程各自的变量无法在线程间互相访问?】。在多线程中,每个线程都是独立运行的,不同的线程有可能是同一段代码,但不会是同一作用域,所以不会共享。而共享内存,并没有作用域之分,同一进程内,不管什么线程都可以通过同一虚拟内存地址来访问,不同进程也可以通过ipc等方式共享内存数据。全局变量:任何线程都可以访问;局部变量(栈变量):任何线程执行到该函数时均...

c# – 捕获当前线程中的所有异常【代码】

在我的Web应用程序中,我有单向异步WCF服务.在这个服务中,我想捕获所有异常,就像我在global.asax Application_Error中所做的那样.我试图处理这些事件:AppDomain.CurrentDomain.UnhandledException += (s,e) => { //some logic }; AppDomain.CurrentDomain.FirstChanceException += (s,e) => { //some logic };甚至试过://this one is for Win Forms Application Application.ThreadException += (s,e) => { //some logic };和//th...

何时在C#中释放线程局部变量【代码】

在以下代码中:public void f() {List l1<int> = new List<int>();List l2<int> = new List<int>();//.. populate l1 and l2ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state){// use l1 and l2// force gc.collect l1 and l2?}));//.. }l1和l2是Thread本地非常大的列表.他们什么时候有资格进行垃圾收集?当线程完成执行块时,它们是否符合条件? 当线程用它们完成时强制l1和l2的垃圾收集是一个好主意吗? 谢...

c# – 从Lock()内的UI线程调用方法【代码】

我有两种方法,MethodA&方法b. MethodB必须在UI线程上运行.我需要它们一个接一个地运行,而不允许MethodC在它们之间运行. 当用户点击一个可爱的小按钮时,会调用MethodC. 我做了什么来确保这个代码锁定代码:Lock (MyLock){MethodA(param1, param2);MyDelegate del = new MyDelegate(MethodB);if (this.IsHandleCreated) this.Invoke(del);}对于MethodC:public void MethodC()Lock (MyLock){Do bewildering stuff.....}问题是我卡住了...