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

c# – 检查列表Count属性时出现多线程问题【代码】

我有List newJobs.有些线程将项目添加到该列表中,而其他线程则从中删除项目(如果它不为空).我有ManualResetEvent newJobEvent,它在项目添加到列表时设置,并在项目从中删除时重置: 通过以下方式将项添加到列表:lock(syncLock){newJobs.Add(job); } newJobEvent.Set();删除作业的方式如下:if (newJobs.Count==0)newJobEvent.WaitOne(); lock(syncLock){job = newJobs.First();newJobs.Remove(job);/*do some processing*/ } newJo...

c# – 从线程调用Invoke / BeginInvoke【代码】

我有一个C#2.0应用程序,其表单使用包含线程的类. 在线程函数中,不是直接调用事件处理程序,而是调用它.结果是拥有表单不需要调用InvokeRequired / BeginInvoke来更新其控件.public class Foo {private Control owner_;Thread thread_;public event EventHandler<EventArgs> FooEvent;public Foo(Control owner){owner_ = owner;thread_ = new Thread(FooThread);thread_.Start();}private void FooThread(){Thread.Sleep(1000);for ...

c# – 从另一个线程或技巧访问HttpSessionState(HttpContext.Current.Session)?【代码】

我们有一个在App_Code中实现中央HttpSessionState管理的网站,如下所示:public static class CurrentSession {public static HttpSessionState Session{get{return HttpContext.Current.Session;}}public static bool Exists{get{return Session != null ? true : false;}}public static ControlUsu user{get{return (ControlUsu)Session["currentuser"];}set{Session["currentuser"] = value;}}public static OdbcConnection conn...

在C#和WCF中的线程之间共享对象

我有一个公开SOAP WCF服务端点的服务器.此服务器还使用名为Ensemble的组通信框架(与问题无关),以便与同一群集中的其他服务器进行通信. 我需要在监听来自其他服务器的传入消息的单独线程和调用它们时运行WCF例程的线程之间共享对象/数据.到目前为止,我做了我能想到的最简单的事情 – 我创建了一个静态“数据库”类,其中包含静态成员和静态方法 – 并使用lock()进行同步.这样我就可以从服务器和组通信线程访问这个类.我的问题是它有点...

c# – 如何正确处理Form,没有从被处置对象的另一个线程调用Invoke的风险?【代码】

我有一个表单“监听”在其他地方提出的事件(不是表单本身,也不是其子控件之一).事件是由甚至在处理Form之后存在的对象引发的,并且可以在创建Form句柄的线程之外的线程中引发,这意味着我需要在事件处理程序中执行Invoke(以显示对事件的更改)形式,例如). 在表单的Dispose(bool)方法中(重写)我取消订阅了在调用此方法时仍可订阅的所有事件.但是,有时仍会从其中一个事件处理程序调用Invoke.我假设这是因为事件处理程序在事件被取消订阅...

c# – 如何获取发生异常的线程的名称?【代码】

我正在处理线程异常,但我想获得发生异常的线程的名称.看来,当线程异常触发时,事件仍停留在主线程上,尽管我认为异常可能发生在另一个线程上.static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) {ShowFaultDialog(e.Exception, "(Application) Thread Exception [" + System.Threading.Thread.CurrentThread.Name + "]"); }解决方法:在静态void Main()中:Thread.CurrentThread....

c# – 在Application_Start上启动长时间运行的线程时可能存在的缺陷【代码】

我希望将这篇文章塑造成一个合法的StackOverflow问题,因为我真的非常希望对这种情况有充分的理解,但我可以肯定地看到它是太局部化还是被认为是“意见”. 这是我的场景:当我加载我的Web应用程序时,我从数据库加载了一大堆数据并缓存它.问题是,此过程大约需要10-15秒,并在Web服务器首次启动时产生延迟.这在开发时有点烦人,并且当我在生产中弹出Web服务器时也会引起一些问题(因为这是一个新站点,我经常热修复我发现它们的小错误,或者...

c# – 暂停/恢复线程的这两种方法有什么区别?【代码】

我有一个多线程应用程序,用于从网站中提取数据.我希望能够从UI暂停和恢复多个线程.在网上搜索后,我了解了两种可用于控制(暂停/恢复)线程的方法. >使用Monitor课程.>使用EventWaitHandle和ManualResetEvent课程. 我做了什么: 我有一个名为GetHtml的函数,它只返回网站的html.为简洁起见,我只是展示了这个功能的一小部分.public string GetHtml(string url, bool isProxy = false) {string result = "";ExecutionGateway();//->> EXT...

c# – 在BeginInvoke()中调用异步方法会产生一个’新’线程吗?【代码】

线程池中的“新”含义. 鉴于以下示例,我的假设是: >主方法在一个线程上执行(例如,线程1)> BeginInvoke使用池中的可用线程来执行AsyncDemo.TestMethod(线程2)>异步方法调用,例如WebClient.UploadStringAsync使用另一个可用线程(线程3) 第三个是我的问题源于的地方,WebClient.UploadStringAsync的定义:将指定的字符串上传到指定的资源.这些方法不会阻止调用线程. 这是否意味着它使用池中的另一个可用线程?这是一种不明智的技术(异...

c# – 这段代码实际上是线程安全的吗?【代码】

我有一个关于以下代码段的问题,我在Microsoft的C#教程网页上找到了该代码段.在代码中,它们提供了任务演示.在事件处理程序中,他们创建一个更新未受保护的集合的任务. 这段代码是线程安全的吗?在我看来,事实并非如此.使这段代码线程安全的最佳方法是什么?private ArrayList students = new ArrayList(); private void btnCreateStudent_Click(object sender, RoutedEventArgs e) {Student newStudent = new Student();newStudent.F...

c# – 如何从主UI线程使用Parallel.ForEach【代码】

我尝试使用Parallel.ForEach从主线程做我的东西:private List<MyData> MyCollection; private static CancellationTokenSource _tokenSource;private void Start(){ThreadStart threadStart = delegate{var token = _tokenSource.Token;Task.Factory.StartNew(() =>{try{Parallel.ForEach(MyCollection,new ParallelOptions{MaxDegreeOfParallelism = (int)nudConcurrentFiles.Value //limit number of parallel threads },file =...

c# – 从不同的线程调用时,WCF双工回调方法永远不会执行【代码】

好的,我的机智已经结束了这件事.我有一个WCF双工服务.以下是架构的工作原理: >客户端打开与端点的连接并提供回调实现>该服务接受该请求并在其他线程上执行一些操作(可能是1秒可能是2分钟,这是我不使用异步操作的原因)>处理完成后,它会调用客户端的回调 问题是当服务调用回调时,似乎没有任何反应.没有错误,没有任何东西.经过进一步调查,我在服务器跟踪中发现了一个异常:The I/O operation has been aborted because of either a t...

c# – 在UI跨线程操作异常后的Task.ConfigureAwait行为【代码】

我正在玩Task.ConfigureAwait,以便更好地理解什么是超越引擎盖.所以我在将一些UI访问内容与ConfigureAwait结合起来时遇到了这种奇怪的行为. 下面是使用简单窗体的示例应用程序,其中包含1个按钮,后跟测试结果:private async void btnDoWork_Click(object sender, EventArgs e) {List<int> Results = await SomeLongRunningMethodAsync().ConfigureAwait(false);int retry = 0;while(retry < RETRY_COUNT){try{// commented on test...

c# – 理解Parallel.Invoke,创建和重用线程【代码】

我试图了解Parallel.Invoke如何创建和重用线程.我运行了以下示例代码(来自MSDN,https://msdn.microsoft.com/en-us/library/dd642243(v=vs.110).aspx):using System; using System.Threading; using System.Threading.Tasks;class ThreadLocalDemo {static void Main(){// Thread-Local variable that yields a name for a threadThreadLocal<string> ThreadName = new ThreadLocal<string>(() =>{return "Thread" + Thread.Curren...

c# – GCFrame中卡住的高线程数导致CPU使用率过高【代码】

我们有一个使用Kestrel来提供HTTP请求的应用程序.我们在过去遇到过一些问题,高负载导致线程池产生数千个线程,此时我们会得到锁定护航症状.大多数情况下,线程会在我们的代码中的某个地方的Monitor.Enter()处开始相互阻塞,导致延迟和更多争用,直到应用程序由于上下文切换而100%CPU使用率无响应.在我们重新启动应用程序之前,问题不会消失. 但是,我们已经删除了大多数锁并实现了限制机制,因此我们不允许超过1000个线程进入应用程序.我...