Tag: multithreading

为什么Microsoft Visual C#2008 Express Edition调试器会随机退出?

我正在使用Microsoft Visual C#2008 Express Edition编写一个multithreadingWindows应用程序。 最近,调试器一直表现得很奇怪。 当我使用F10踩过代码行时,有时它会像继续命令(F5)一样解释我的Step Over(F10)命令,然后程序将继续运行并且调试会话将完成。 有谁知道为什么会这样? 在什么情况下,Step Over命令会导致调试器停止? 调试代码不是问题:它不仅仅发生在特定的代码行上。 它发生在每次运行调试器时不同的随机行上。 这对我的键盘来说不是问题:当我在Debug工具栏中单击Step Over时,会发生同样的事情。 这可能是我程序中其他线程的问题。 也许其中一个是随机做一些有中断调试器的副作用的东西。 那可能吗? 提前致谢!

ReaderWriterLockSlim是正确的选择吗?

我正在为在Windows Azure中运行的应用程序编写全局error handling程序/记录器。 当应用程序中发生错误时,执行需要以primefaces方式执行的许多操作。 我需要防止在上一个错误完成之前记录错误。 同时,我希望根据需要读取日志。 我最初的想法是使用Monitor / lock并仅锁定错误写入。 这样就完全没有抑制读取。 我想知道ReaderWriterLockSlim是否更合适。 我不能说我真正理解一种方法与另一种方法之间的价值。 我应该创建一个ReaderWriterLockSlim并执行以下操作(将读取包装在EnterReadLock中)… public static void LogError(Exception exception) { _lock.EnterWriteLock(); … _lock.ExitWriteLock(); } 或者我只是执行以下操作,只锁定写入部分: public static void LogError(Exception exception) { lock (someStaticLock) { … } } 任何想法/建议将不胜感激。

任务MaxDegreeOfParallelism可以每次从我的列表中获取前n个对象吗?

我在我的函数中打开n并发线程: List _files = new List(); public void Start() { CancellationTokenSource _tokenSource = new CancellationTokenSource(); var token = _tokenSource.Token; Task.Factory.StartNew(() => { try { Parallel.ForEach(_files, new ParallelOptions { MaxDegreeOfParallelism = 5 //limit number of parallel threads }, file => { if (token.IsCancellationRequested) return; //do work… }); } catch (Exception) { } }, _tokenSource.Token).ContinueWith( t => […]

GDI +:如何在背景线程上将Graphics对象渲染为位图?

我想使用GDI +在后台线程上渲染图像。 我找到了关于如何使用GDI +旋转图像的这个例子 ,这是我想做的操作。 private void RotationMenu_Click(object sender, System.EventArgs e) { Graphics g = this.CreateGraphics(); g.Clear(this.BackColor); Bitmap curBitmap = new Bitmap(@”roses.jpg”); g.DrawImage(curBitmap, 0, 0, 200, 200); // Create a Matrix object, call its Rotate method, // and set it as Graphics.Transform Matrix X = new Matrix(); X.Rotate(30); g.Transform = X; // Draw image g.DrawImage(curBitmap, […]

Task.WaitAll()无法按预期工作

我正在试图弄清楚如何使用Task类。 在过去我总是使用常规的Thread类,但我正在尝试掌握所有的异步编程…… 作为一个例子,我创建了一个包含所有代码的主Winforms应用程序。 我的问题的相关代码是: //Relevant delegates public delegate void MethodAction(int num); public delegate void MethodConversion(); public delegate void OnCompletionAction(string completiontext); //Button user presses private void button4_Click(object sender, EventArgs e) { richTextBox1.Clear(); sw.Reset(); sw.Start(); Sync.RunAsync3(calcSim); } //The method that simulates a calculation by adding a sleep //the input param threadlength is just to allow threads to […]

线程暂停和恢复c#

我有几个post,我怎么能暂停/恢复它们? 从重复的问题: 我如何暂停5个线程,并记住它们的状态。 因为其中一个正在吃另一个正在思考等等

UI.跨线程操作exception后的Task.ConfigureAwait行为

我正在玩Task.ConfigureAwait ,以便更好地了解什么是超越引擎盖。 所以我在将一些UI访问内容与ConfigureAwait结合起来时遇到了这种奇怪的行为。 下面是使用简单窗体的示例应用程序,其中包含1个Button后跟测试结果: private async void btnDoWork_Click(object sender, EventArgs e) { List Results = await SomeLongRunningMethodAsync().ConfigureAwait(false); int retry = 0; while(retry < RETRY_COUNT) { try { // commented on test #1 & #3 and not in test #2 //if(retry == 0) //throw new InvalidOperationException("Manually thrown Exception"); btnDoWork.Text = "Async Work Done"; Logger.Log("Control Text Changed", […]

线程订单执行?

我有这个简单的代码:( 我在linqpad中运行 ) void Main() { for ( int i=0;idoWork(tmp)).Start(); } } public void doWork( int h) { h.Dump(); } int tmp=i; line用于捕获变量 – 因此每次迭代都有自己的值。 2个问题: 1)数字不是顺序的,而线程执行是! 2)有时我得到的数字少于 10个! 这里有一些执行输出: 问题 : 1)为什么案例1正在发生,我该如何解决? 2)为什么案例2正在发生,我该如何解决?

我可以从后台线程更新UI,为什么?

大家都知道,不允许从后台线程更新UI(或不是?) 我做了一个小实验。 这是一段代码: var thread = new Thread(() => progressBar1.Increment(50)); thread.IsBackground = true; thread.Start(); thread.Join(); 我将此代码放在一些按钮单击处理程序中。 知道吗? 我的进度条正在递增…从后台线程。 现在我很困惑。 我不明白这是怎么可能的,我做错了什么

后台线程如何挂起UI线程?

我正在使用后台线程通过USB初始化仪器。 当我尝试打开设备时,UI挂起。 我希望后台线程在设备上调用Open时暂停,但不是UI线程。 我正在测试这个没有来自后台线程的UI交互。 我不知道如何调试这个问题,这个问题太广泛了,但也许有人之前已经看过这样的事情了。 据我所知,ActiveX互操作没有任何问题,设备正常工作。 这是一般方法: using System; using FancyVoltmeterLibrary; namespace SOQuestion { public class MeterClass { private FancyVoltmeter meter; private Thread meterThread; public MeterClass() { // Create instance of ActiveX/COM object. meter = new FancyVoltmeter(); meterThread = new Thread(UpdateMeter); meterThread.Name = “Meter Thread”; meterThread.Priority = ThreadPriority.Normal; meterThread.IsBackground = true; meterThread.Start(); } private void […]