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

c# – 有时线程无法启动【代码】

参见英文答案 > Strange behaviour of Console.ReadKey() with multithreading 3个我遇到了一些问题,我无法理解为什么会这样.这是一个简单的例子:class ConsoleApp {static void Main(string[] args){Thread workThread = new Thread(ThreadProc);//Console.WriteLine("Starting"); // uncomment thisworkThread.Start();Console.ReadKey(true); // first ReadKeyConsole.ReadKey(true); // s...

c#中的私有静态变量和线程安全性【代码】

我的同事在多线程c#app中编写了以下代码…public class1 {private static partialClass var1 = new partialNonStaticClass();public static method1(){//do something with var1} }虽然var1是私有的并且设置为非静态的部分类,但它是静态的这一事实意味着它可以被所有线程共享.此外,不对var1执行锁定.因此,var1不是线程安全的. 只是想有人来验证我是对的.解决方法:, the fact that it is static means it could be shared by all th...

c# – BackgroundWorker – 调用线程无法访问对象【代码】

所以在我的DoWork中,我有List<KeyValuePair<String, BitmapImage>> Files = new List<KeyValuePair<string,BitmapImage>>((List<KeyValuePair<String, BitmapImage>>)e.Argument);foreach (KeyValuePair<String, BitmapImage> i in Files) {string temp = i.ToString(); .......(1)//..... }我将论点传递如下: – backgroundWorkerForReupload.RunWorkerAsync(files);其中“files”属于Type List< KeyValuePair< st...

c# – 多线程异常冒泡

我有一个处理事件回调的应用程序,在我的例子中,它是SerialPort上的DataReceived事件.在该回调中,我有业务逻辑,需要在另一个线程上引发异常.该线程正在等待事件监听器向其发送消息,或者让它知道发生了异常. 跨线程保留堆栈跟踪的最佳方法是什么? 将线程传递给工作线程并重新抛出它会导致堆栈跟踪丢失.解决方法:>这取决于您的方法,例如TPL:throw – >AggregateException.> BackGroundWorker – >你必须要注意结果中的错误.>主题 ...

c# – 实现跨线程调用检查【代码】

我需要检查一个方法是从实例化类的同一个线程调用的,类似于WinForms控件实现的功能. 怎么能实现这个?以下示例是否有效?public class Foo {int ManagedThreadId; public Foo(){ManagedThreadId=Thread.CurrentThread.ManagedThreadId;}public void FooMethod(){if (ManagedThreadId!=Thread.CurrentThread.ManagedThreadId)throw new InvalidOperationException("Foo accessed from a thread other than the thread it was creat...

c# – ThreadStatic,ThreadLocal,GetData优于为线程创建对象实例的优势是什么?【代码】

一位朋友问我哪个更好ThreadStatic或ThreadLocal.检查文档我告诉他ThreadLocal看起来更方便,从.NET 4.0开始可用,但我不明白为什么使用它们中的任何一个而不是为线程创建对象实例.它们的目的是存储“线程本地数据”,因此您可以不那么笨拙地调用方法,并避免在某些情况下锁定.当我想要这样的线程本地数据时,我总是创建类似于:class ThreadHandler{SomeClass A;public ThreadHandler(SomeClass A){this.A = A;}public void Worker(){}...

c# – 具有大量文件IO任务的多线程【代码】

我不是C#的新手,但我对语言不太熟悉,知道如何做我需要做的事情. 我有一个文件,称之为File1.txt. File1.txt有100,000行左右.我将复制File1.txt并将其命名为File1_untested.txt.我还将创建一个空文件“Successes.txt”对于文件中的每一行: >从File1_untested.txt中删除此行>如果此行通过测试,请将其写入Successes.txt 所以,我的问题是,我怎样才能多线程呢? 到目前为止,我的方法是创建一个对象(LineChecker),给对象提供要检查的行,并...

c#线程化循环函数,每次执行时有两个独立的作业【代码】

我试图在不改变算法的情况下提高程序的速度. 目前我使用DFT的这种实现:public double[] dft(double[] data) {int n = data.Length;int m = n;// I use m = n / 2d;float[] real = new float[n];float[] imag = new float[n];double[] result = new double[m];float pi_div = (float)(2.0 * Math.PI / n);for (int w = 0; w < m; w++) {float a = w * pi_div;for (int t = 0; t < n; t++) {real[w] += (float)(data[t] * Math.Cos(...

c# – 暂停和恢复线程活动【代码】

我有一个线程,在某个时间间隔内将点添加到zedgraph组件上.我需要在按下复选框时暂停添加点,然后在再次按下该复选框时继续添加它们.以下是我对线程的看法:public class myThread{ManualResetEvent pauseResumeThread = new ManualResetEvent(true);public void threadHeartrateGraph(){ for (int k = 15; k < _hr.Length; k++){pauseResumeThread.WaitOne();if (HRData...

c# – 任务并行库(TPL)中的线程同步【代码】

我正在学习TPL并坚持不懈.这只是为了学习目的,我希望人们能指导我正确的方向. 我只想要一个线程一次访问变量sum,这样它就不会被覆盖. 我的代码如下.using System; using System.Threading.Tasks;class ThreadTest {private Object thisLock = new Object();static int sum = 0;public void RunMe(){lock (thisLock){sum = sum + 1;}}static void Main(){ThreadTest b = new ThreadTest();Task t1 = new Task(()=>b.RunMe());Task t...

推荐使用.Net / C#中的多线程书籍?

有没有人为.net编写任何涉及多线程的书籍?我看过Joe Duffy和Joseph Albahari的书,他们很好.然而,我希望有一些东西可以触及PLINQ和TPL,Duffy的书确实如此,但它的许多例子和片段都在C中.我理想地寻找更多C#导向的东西. 谢谢你的建议.解决方法:C# 4.0 in a Nutshell尚未发布,但您可以在线访问该手稿.它涵盖了PLINQ / TPL库.

c# – 嵌套的BackgroundWorkers:在错误的线程上运行RunWorkerCompleted?【代码】

我正在进行需要调用更多异步任务的异步操作.我试图通过使用BackgroundWorkers来保持简单,结果是一个BackgroundWorker的DoWork()回调调用一个创建第二个BackgroundWorker的方法,就像这样(减去错误检查和所有爵士乐的简洁):class Class1 {private BackgroundWorker _worker = null;public void DoSomethingAsync(){_worker = new BackgroundWorker();_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker_Run...

c#从另一个线程调用backgroundWorker而不是UI线程【代码】

我正在尝试像下面的代码一样加载loadingForm.但它不起作用,loadForm不会消失,RunWorkerCompleted事件不会被调用. 而且,我需要多次调用loadingForm和backgroundWorker,那么如何在每次调用后完全处理loadForm和backgroundWorker? 我认为我的代码中有很多问题,但我不知道如何修复它.你能告诉我如何解决我的问题并指出我需要修复的地方吗?非常感谢提前.public partial class loginForm : Form {//....private loadingForm lf;private...

c# – 在控制台应用程序中同步来自不同线程的事件【代码】

我感觉自己像一个总的菜鸟问这个,但无论如何,它在这里: 我想知道从不同线程同步事件的最简单方法是什么. 一些示例代码:class Program {static void Main(string[] args){Console.WriteLine("# started on:" + Thread.CurrentThread.ManagedThreadId);tt t = new tt();t.First += new EventHandler(t_First);t.Second += new EventHandler(t_Second);Task task = new Task(new Action(t.Test));task.Start();while (true){Console...

c# – WaitAll和done事件的线程问题 – 信号触发异常【代码】

我正在使用线程池(毫不奇怪)管理一组线程.我要做的是让他们在完成后发出信号,我有:ManualResetEvent[] doneEvents = new ManualResetEvent[char_set.Length];public struct string_char{public string[] _str_char;public ManualResetEvent _doneEvent;public string_char(string[] str_char, ManualResetEvent doneEvent){_str_char = str_char;_doneEvent = doneEvent;}}我有一个循环,创建一个char数组,然后我创建一个我的struc...