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

c# – 多线程网络爬网程序线程限制

我可以访问用.NET C#编写的应用程序,它连接(主要使用“原始”http请求,部分Web服务和xml请求,仍然通过http)到许多外部系统并更新其中的一些内容. 在给定时间可能有很多工作排队,而增加吞吐量的天真方法是增加线程数.它背后的逻辑是:由于我们大多数时间都在等待网络回复,我们可以同时等待更多的网络回复. cpu和ram似乎没有达到极限. 仍然创建大约300个线程使得一切都比较低的线程数慢. 我想知道它是操作系统限制(Windows Server 20...

c# – 异步的行为等待新线程【代码】

我试图了解async / await的精确行为,并且在我周围缠绕时遇到了一些麻烦. 考虑这个例子:public async void StartThread() {while(true){SomeOtherClass.SomeSynchronousStuff();var something = await SomeOtherClass.SomeOtherAsyncMethod();} }public void ConstructorForThisClass() {Thread thread = new Thread(StartThread);thread.Start(); }我对async / await的理解是,幕后发生的事情是编译器本质上是将代码转换成一堆回调...

c# – SynchronizationContext Send()应该是同一个线程吗?【代码】

我有这种情况,我尝试在创建的同一个线程上处理事件.这通常在UiThread中完成,但我不是在UiThread上开始.我有一些测试基本上有以下步骤.我遗漏了一些细节.我不确定这是否应该按照我认为的那样行事. 首先,我检查当前线程的Idvar myThreadId = Thread.CurrentThread.ManagedThreadId;我创建了一个SynchronizationContext,并设置为当前var _context = new SynchronizationContext(); SynchronizationContext.SetSynchronizationContext(...

c# – 如何在多线程上下文中使方法独占?【代码】

我有一个应该以独家方式执行的方法.基本上,它是一个多线程应用程序,其中方法由计时器定期调用,但也可以由用户操作手动触发. 我们来举个例子: >计时器过去了,所以方法是调用.任务可能需要一些秒.>之后,用户点击一些按钮,应该触发同样的任务:BAM.它什么都不做因为该方法已在运行. 我使用了以下解决方案:public void DoRecurentJob() {if(!Monitor.TryEnter(this.lockObject)){return;}try{// Do work}finally {Monitor.Exit(this....

c# – .net应用程序多线程

我有一个多核cpu,但我写的.net app只使用其中一个核心.当该选项可用时,如何使其使用多个核心.解决方法:这不是免费的.使用多个核心需要使用多个线程.您必须向程序明确添加线程支持才能同时使用多个内核. 这是一篇很棒的文章,探讨如何使用任务并行库(也称为parallel extensions framework)利用托管代码来利用多个内核. http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

c# – 关于多线程的问题【代码】

如果我有一个线程:Thread sendMessage = new Thread(new ThreadStart(timer.Start()));将,计时器的Tick事件将在主线程或sendMessage线程上? 编辑:我有一个队列,我希望每x毫秒计时器将打勾,程序将队列中的数组出列,但这是我的代码:Thread sendMessage = new Thread(new ThreadStart(startThreadTimer));public Queue<Array> messageQueue = new Queue<Array>(); System.Threading.Timer timer;private void startThreadTimer(){...

c# – 我应该将DbContext的实例保存在执行定期作业的单独线程中【代码】

我有一个定期发送电子邮件的类Worker,我从App_start()上的Global.asax.cs开始public static class Worker {public static void Start(){ThreadPool.QueueUserWorkItem(o => Work());}public static void Work(){var r = new DbContext();var m = new MailSender(new SmtpServerConfig());while (true){Thread.Sleep(600000);try{var d = DateTime.Now.AddMinutes(-10);var ns = r.Set<Notification>().Where(o => o.SendEmail && !...

c# – 使用字典的不安全线程 – 让我们打破一些东西【代码】

所以在http://msdn.microsoft.com/en-us/library/xfhwa508.aspx的底部我们看到了A Dictionary(Of TKey, TValue) can support multiple readers concurrently, as long as the collection is not modified. Even so, enumerating through a collection is intrinsically not a thread-safe procedure. In the rare case where an enumeration contends with write accesses, the collection must be locked during the entire enume...

c# – 忙线等待线程【代码】

基本上,我需要忙等到网页上出现一些html.我已经创建了以下代码来忙着等我:public void ExecuteBusyWaitThreads(){foreach (Canidate canidate in allCanidates){Thread newThread = new Thread(delegate(){BusyWait(canidate);});newThread.Start();}}public bool BusyWait(Canidate canidate){//hit that url, and wait for the claim all button to appearstring page = null;while (found == false){HttpWebRequest request = ...

StreamWriter多线程C#【代码】

我想请求帮助我的代码.我是一个新手,想要在写入文本文件时实现安全的多线程.StreamWriter sw = new StreamWriter(@"C:\DailyLog.txt");private void Update(){var collection = Database.GetCollection<Entity>("products");StreamReader sr = new StreamReader(@"C:\LUSTK.txt");string[] line = sr.ReadLine().Split(new char[] { ';' });while (!sr.EndOfStream){line = sr.ReadLine().Split(new char[] { ';' });t = delegate ...

c# – Parallel.For loop – 为每个线程分配唯一的数据实体【代码】

我有100条并行化记录,从1到100,现在我可以方便地使用Parallel.For在Parallel中执行它们,如下所示,它将基于计算资源工作Parallel.For(0, limit, i =>{DoWork(i);});但是有一些限制,每个线程需要使用相同的数据实体,并且数据实体数量有限,例如10,它们是通过相互克隆并将它们保存在像Dictionary或List这样的结构中而先进创建的.现在我可以使用以下代码限制并行化的数量:Parallel.For(0, limit, new ParallelOptions { MaxDegreeOfPar...

c# – 多次调用优先级最低的线程【代码】

以下代码5个具有不同优先级的线程正在竞争访问具有8个内核的CPU(Mac OS X 10.8.5,Mono).每个线程增加其计数器.using System; using System.Threading;class PriorityTesting { static long[] counts; static bool finish;static void ThreadFunc(object iThread) { while(true) { if(finish) break; counts[(int)iThread]++; } }static void Main() { counts = new long[5]; Thread[] t = new Thread[5]; for(int i=0; i<t.Length;...

c# – 我如何强制等待在同一个线程上继续?【代码】

await不保证在生成任务的同一任务上继续:private void TestButton_Click(object sender, RoutedEventArgs e) {Task.Run(async () =>{Debug.WriteLine("running on task " + Task.CurrentId);await Task.Delay(TimeSpan.FromMilliseconds(100));Debug.WriteLine("running on task " + Task.CurrentId);}); }这个输出是:running on task 1 running on task所以我们可以看到,不仅执行已经移动到另一个任务,而且还移动到UI线程.如何创...

c# – GDI:如何在背景线程上将Graphics对象渲染为位图?【代码】

我想使用GDI在后台线程上渲染图像.我找到了关于如何使用GDI旋转图像的this example,这是我想要做的操作.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.TransformMatri...

c# – BackgroundWorker OnWorkCompleted抛出跨线程异常【代码】

我有一个简单的UserControl用于数据库分页,它使用控制器来执行实际的DAL调用.我使用BackgroundWorker来执行繁重的工作,并在OnWorkCompleted事件上重新启用一些按钮,更改TextBox.Text属性并为父窗体引发事件. 表单A保存我的UserControl.当我点击打开表单B的某个按钮时,即使我没有做任何“那里”并且只是关闭它,并尝试从我的数据库引入下一页,OnWorkCompleted会在工作线程上被调用(而不是我的主线程),并抛出一个跨线程异常. 目前我在...