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

c# – 等待任何线程完成,而不是全部【代码】

我正在启动多个线程,并想知道何时完成.我知道以下代码:foreach (Thread t in threads)t.Join();但它只会等待所有线程在一起.那太晚了.我需要知道一个线程何时完成,即使其他线程仍在运行.我正在为线程寻找等同于WaitAny的东西.但是我无法将代码添加到我正在监视的所有线程中,因此使用信号或其他同步对象不是一种选择. 一些澄清:我正在开发一个记录/跟踪工具,它应该记录应用程序的活动.我可以在线程启动时插入日志语句,但是我不能在...

c# – ThreadStateException:尝试加入线程时尚未启动线程【代码】

就在最近,我在面试时遇到了这样一个问题 什么是methid’计算’执行的输出:public void Calculate(){var threads = Enumerable.Range(0, 50).Select(x =>{var thread = new Thread(DoWork){Name = x.ToString()};return thread;});foreach (var thread in threads){thread.Start();}foreach (var thread in threads){thread.Join();}}private void DoWork(){Console.WriteLine("Start()");}我在VS中检查了它,并且惊讶于线程’threa...

c# – 如何唤醒睡眠线程?【代码】

我在load事件中创建了一个线程,如下所示:Thread checkAlert = null; bool isStop = false; private void frmMain_Load(object sender, EventArgs e) {checkAlert = new Thread(CheckAlert);checkAlert.Start(); } void CheckAlert() {while (!isStop){Thread.Sleep(60000);//do work here} }有没有办法在休眠期间恢复checkAlert线程?(Thread.Sleep(60000);) 我尝试使用Thread.Interrupt()但它流出一个ThreadInterruptedExceptio...

c# – 为什么在Task中运行的Thread.Sleep不会阻止WinForms UI线程?【代码】

我正在玩C#和Window Forms中的任务,我遇到了一个奇怪的效果.我有一个表格,其中包含一个每300毫秒勾选一次的计时器. tick事件将该表单中控件的背景更改为随机颜色.我有另一个按钮,当单击时会启动一个新的任务,它只使用Thread.Sleep等待3秒.我还插入了一个用于记录的文本框. 因为从我对任务的理解,他们没有创建新线程来运行任务(并且日志也显示了这一点),我希望第一个按钮在任务运行时停止改变它的颜色3秒,因为一个线程一次只能做一件...

c# – 应用程序称为为不同线程编组的接口. (来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))【代码】

在我的Windows Phone 8.1应用程序中,我有一个单件服务DataService,它应该偶尔下载一些数据.同时在UI上我应该显示收到的数据量.当用户登录应用程序时,将调用DataService.StartGettingData():void StartGettingData() {if (getDataTaskCancellationTokenSource != null)getDataTaskCancellationTokenSource.Cancel();getDataTaskCancellationTokenSource = new CancellationTokenSource();var token = getDataTaskCancellationToken...

c# – 使用null传播事件的线程安全性【代码】

参见英文答案 > Can I use null conditional operator instead of classic event raising pattern? 1个这两个样本是否相同?可以用Invoke和null传播替换旧式的提升吗? 旧:public event EventHandler<MyEventArgs> MyEvent;protected virtual void OnMyEvent(MyEventArgs args){EventHandler<MyEventArgs> handler = this.MyEvent;if (handler != null)handler(this, args);}新:public event...

c# – 使用线程和EventWaitHandle的生产者/消费者模式【代码】

我想这是一种代码审查,但这是我对生产者/消费者模式的实现.我想知道的是,在某种情况下,ReceivingThread()或SendingThread()方法中的while循环可能会停止执行.请注意EnqueueSend(DataSendEnqeueInfo信息)是从多个不同的线程调用的,我可能不能在这里使用任务,因为我必须在一个单独的线程中使用命令.private Thread mReceivingThread; private Thread mSendingThread; private Queue<DataRecievedEnqeueInfo> mReceivingThreadQueue; ...

C#中的多线程:如何将函数名称传递给另一个函数来启动新线程?【代码】

我在我的C#代码中使用多线程如下:Thread startThread;public void NewThread() {ThreadStart starter = delegate { foo(); };startThread = new Thread(starter);startThread.Start(); }private void foo() {//do some work }然后在我的应用程序中,我调用NewThread()来运行新线程. 但是现在我在每个类上都有很多线程,并且每个类都有一个NewThread(),我想把它移动到一个静态的Util类,并在每次我希望在该函数上有一个新线程时将它传...

c# – 如果调用堆栈被破坏,那只会崩溃当前线程还是整个应用程序?

当谈到C#中的线程时,我是一个菜鸟,我不确定每个线程是否应该有自己的调用堆栈?基本上,如果我得到“运行时检查失败#0 – ESP的值不正确”,那只会崩溃它发生的线程,还是整个程序?解决方法:每个线程都有自己的堆栈,因此堆栈损坏只会直接影响单个线程.但是默认的线程异常处理程序将取消应用程序.

如何使用NUnit在C#中对线程安全通用列表进行单元测试?【代码】

我问了一个关于构建自定义Thread Safe Generic List的问题,现在我正在尝试进行单元测试,我完全不知道如何做到这一点.由于锁定发生在ThreadSafeList类中,我不确定如何在我尝试模仿多个add调用时使列表锁定一段时间.谢谢. Can_add_one_item_at_a_time[Test] public void Can_add_one_item_at_a_time() //this test won't pass {//I am not sure how to do this test...var list = new ThreadSafeList<string>();//some how need to c...

C#等待所有线程在ThreadPool中终止【代码】

我有一个主线程和许多其他后台线程. 这些后台线程的主要用途是查询数据(来自Web的许多查询,这就是我创建多个线程的原因:避免滞后用户界面). 在主线程(用户界面)中导出数据时,我需要等到所有其他线程都完成. 我的代码是://...code to open save file dialog...//this loop is to wait for all the threads finish their query //QueryThread.threadCount is the count of the background threads while (QueryThread.threadCount ...

5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结【代码】【图】

5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结 ?5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task 5天玩转C#并行和多线程编程 —— 第四天 Task进阶 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结 一、多线程带来的问题 1、死锁问题 前面我们学...

c# – 如何正确等待调用Dispatcher.Invoke的多个线程在WPF应用程序中完成【代码】

我有一个WPF应用程序启动3个线程,需要等待它们完成.我在这里阅读了许多处理此问题的帖子,但似乎没有解决线程代码调用Dispatcher.Invoke或Dispatcher.BeginInvoke的情况.如果我使用线程的Join()方法或ManualResetEvent,则线程会在Invoke调用上阻塞.这是一个丑陋的解决方案的简化代码片段似乎有效:class PointCloud {private Point3DCollection points = new Point3DCollection(1000);private volatile bool[] tDone = { false, fal...

C#GUI应用程序,来自另一个更新UI的线程的另一个类【代码】

我一直在研究如何做这个约一个星期,我仍然不确定正确的方法,在一些例子中我看到Thread类用于其他我看到Invoke使用,这让我感到困惑. 我在c#中有一个GUI程序,它包含一个textBox,用于向用户提供信息. 我面临的问题是我不知道如何从另一个在另一个线程上运行的类向textBox追加文本.如果有人能告诉我一个有效的例子,那对我有很大的帮助. 最好的祝福!解决方法:简单:MainWindow.myInstance.Dispatcher.BeginInvoke(new Action(delegate(...

c# – 具有自动复位或单线程的Threading.Timer?【代码】

我想创建一个从GSM设备读取SMS消息的类. 我创建了一个定时器(system.threading),每秒读取一次传入消息.public void ReadMessage(){ //read sms messages //and store it into the database }有时ReadMessage()需要超过一秒钟.如何防止计时器从前一个尚未完成时调用此过程?1. AutoResetEvent和WaitOne对此有好处吗?2. Threading.Timer是一个不错的选择吗?或者我应该在一个线程上做?解决方法:您应该使用System.Timers.Timer,这更...