Tag: multithreading

线程中的exception处理

最近我参加了一次采访。 给我一个代码片段。我知道,面试官是从albhari的线程样本中获取的。 public static void Main() { try { new Thread (Go).Start(); } catch (Exception ex) { // We’ll never get here! Console.WriteLine (“Exception!”); } } static void Go() { throw null; } 将上述代码修改为 public static void Main() { new Thread (Go).Start(); } static void Go() { try { … throw null; // this exception […]

在控制台应用程序中的主线程上调用委托

在Windows应用程序中,当使用多个线程时,我知道有必要调用主线程来更新GUI组件。 如何在控制台应用程序中完成? 例如,我有两个线程,一个主线程和一个辅助线程。 辅助线程始终在监听全局热键; 当它被按下时,辅助线程执行一个事件,该事件触及win32 api方法AnimateWindow。 我收到错误,因为只允许主线程执行所述函数。 当“调用”不可用时,如何有效地告诉主线程执行该方法? 更新:如果有帮助,这是代码。 要查看HotKeyManager内容(其他线程正在发挥作用),请查看此问题的答案 class Hud { bool isHidden = false; int keyId; private static IntPtr windowHandle; public void Init(string[] args) { windowHandle = Process.GetCurrentProcess().MainWindowHandle; SetupHotkey(); InitPowershell(args); Cleanup(); } private void Cleanup() { HotKeyManager.UnregisterHotKey(keyId); } private void SetupHotkey() { keyId = HotKeyManager.RegisterHotKey(Keys.Oemtilde, KeyModifiers.Control); HotKeyManager.HotKeyPressed += new EventHandler(HotKeyManager_HotKeyPressed); } void […]

C#:向ASP.NET中的Parallel.ForEach()添加上下文

我有一个带静态get属性的静态类,在这个属性中,我这样做: // property body { // HttpContext.Current is NOT null … Parallel.ForEach(files, file => { // HttpContext.Current is null var promo = new Promotion(); … }); … // HttpContext.Current is NOT null } 在视图使用此属性之前,此静态类不会进行类型初始化。 问题是,在Parallel.ForEach()创建new Promotion()时初始化的Promotion的静态构造函数使用HttpContext.Current 。 当promo在此Parallel.ForEach()的范围内实例化时, HttpContext.Current为null ,因此new Promotion()会导致exception。 HttpContext.Current在静态get属性中不为null,因为在视图使用它之前不会调用它(因此它有一个HttpContext.Current )。 如果Promotion在其实例中使用HttpContext.Current而不是静态成员,我可能只是将HttpContext.Current传递给new Promotion()构造函数: var context = HttpContext.Current; Parallel.ForEach(files, file => { var promo […]

为什么BCL中没有AutoResetEventSlim?

为什么BCL中没有AutoResetEventSlim类? 可以使用ManualResetEventSlim进行模拟吗?

将Keith Hill的PowerShell Get-Clipboard和Set-Clipboard转换为PSM1脚本

我想将Keith Hill的Get-Clipboard和Set-Clipboard的C#实现转换为纯PowerShell作为.PSM1文件。 有没有办法在PowerShell中启动STA线程,就像他在使用剪贴板时在Cmdlet中一样? 博客文章 代码

计时器是否创建新线程?

timer.Interval = 5000; timer.Tick += new EventHandler(timer_Tick); timer.Start(); “timer_Tick”方法是在一个新线程中启动还是仍然在它创建的线程中?

VB.NET中的易失性等价物

可能重复: 如何在VB.net中指定volatile的等价物? 什么是C#“volatile”的VB.NET关键字? 如果没有关键字什么机制是等价的?

从c#中的不同线程启动一个计时器

嗨我已经介入了一些与计时器相关的问题。 希望有人可以帮忙.. 我有一个包含按钮的窗体 当我点击该按钮时,我启动参数化线程 Thread thread1 = new Thread(new ParameterizedThreadStart( execute2)); thread1.Start(externalFileParams); 线程内的代码执行得很好 在这个线程的最后一行,我启动一个计时器 。 public void execute2(Object ob) { if (ob is ExternalFileParams) { if (boolean_variable== true) executeMyMethod();//this also executes very well if condition is true else { timer1.enabled = true; timer1.start(); } } } } 5但是没有触发计时器的tick事件 我正在研究VS2008 3.5框架。 我已经从工具箱拖动计时器并将其Interval设置为300也尝试设置Enabled true / false方法是timer1_Tick(Object sender […]

线程完成时通知,不锁定调用线程

我正在研究构建在.NET 3.5之上的遗留应用程序。 这是一个我无法改变的约束。 我需要执行第二个线程来运行长时间运行的任务而不锁定UI。 线程完成后,我需要以某种方式执行回调。 现在我尝试了这个伪代码: Thread _thread = new Thread(myLongRunningTask) { IsBackground = True }; _tread.Start(); // wait until it’s done _thread.Join(); // execute finalizer 第二个选项不锁定UI,如下所示: Thread _thread = new Thread(myLongRunningTask) { IsBackground = True }; _tread.Start(); // wait until it’s done while(_thread.IsAlive) { Application.DoEvents(); Thread.Sleep(100); } // execute finalizer 当然第二种解决方案并不好,因为它过度充电UI。 _thread完成后执行回调的正确方法是什么? 另外,我如何知道线程是否被取消或中止? * […]

什么是TaskFactory.StartNew()中的“cancellationToken”用于?

http://msdn.microsoft.com/en-us/library/dd988458.aspx UPD : 所以,让我们讨论这篇文章: http : //msdn.microsoft.com/en-us/library/dd997396.aspx 我已经改变了一点代码: static void Main() { var tokenSource2 = new CancellationTokenSource(); CancellationToken ct = tokenSource2.Token; var task = Task.Factory.StartNew(() => { // Were we already canceled? ct.ThrowIfCancellationRequested(); bool moreToDo = true; Thread.Sleep(5000); while (moreToDo) { // Poll on this property if you have to do // other cleanup before […]