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

c# – 限制线程池线程的数量【代码】

我在我的应用程序中使用ThreadPool.我首先使用以下命令设置线程池的限制:ThreadPool.SetMaxThreads(m_iThreadPoolLimit,m_iThreadPoolLimit); m_Events = new ManualResetEvent(false);然后我使用以下内容排队WaitCallback objWcb = new WaitCallback(abc); ThreadPool.QueueUserWorkItem(objWcb, m_objThreadData); 这里abc是我调用的函数的名称.在此之后,我正在执行以下操作,以便我的所有线程都达到1点,主线程接管并继续进行m_E...

c# – List属性的线程安全访问【代码】

我想知道这个声明是否会导致同步问题:List<Character> characters = World.CharacterManager.Characters;‘人物’是一个阶级 ‘CharacterManager.Characters’看起来像这样:public List<Character> Characters {get{lock (this.objLock) { return this.characters; }} }这会导致同步问题吗? 我想使用引用的List迭代来查找我正在寻找的角色.解决方法:锁是没用的.您将不得不使用诸如Will建议的线程安全集合,或者如果您不需要写访问...

c# – 这个示例线程是否安全?【代码】

假设我有一个充当数据缓存的单例类.多个线程将从缓存中读取,并且单个线程将定期刷新它.它看起来像这样:public sealed class DataStore {public static DataStore Instance { get { return _instance; } }public Dictionary<Foo, Bar> FooBar { get; private set; }static DataStore() { }private DataStore() { }public void Refresh() {FooBar = GetFooBarFromDB();}private static readonly DataStore _instance = new DataStor...

c# – 停止线程,ManualResetEvent,volatile boolean或cancellationToken【代码】

我在Windows服务中有一个Thread(STAThread),它执行大量工作.重新启动Windows服务时,我想优雅地停止此线程. 我知道几种方法 >一个不稳定的布尔值> ManualResetEvent> CancellationToken 据我所知,Thread.Abort是不行的…… 什么是最佳做法?该工作在另一个类中执行,而不是启动线程的类,因此有必要在构造函数中引入cancellationToken参数或者例如具有volatile变量.但我无法弄清楚什么是最聪明的. 更新为了澄清一点,我已经结束了一个我...

c# – Azure Functions – 在另一个线程中运行长操作【代码】

我正在尝试使用Azure Functions解决方案实现文件转换.转换可能需要很长时间.因此,我不希望在呼叫服务器上等待响应.我编写了立即返回响应的函数(表示服务可用并启动转换)并在单独的线程中运行转换.回调URL用于发送转换结果.public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, Stream srcBlob, Binder binder, TraceWriter log) {log.Info($"C# HTTP trigger function processed a request. RequestUri={re...

让当前线程在让其他线程调用C#之前使用该函数完成【代码】

我似乎无法获得thread.Join()来为这个例子工作.我是多线程和C#的新手,所以我不确定如何将在线示例应用到我自己的编码中.这是我编码的一个例子:using System; using System.Threading;public class Example {static Thread thread1, thread2, thread3, thread4;public static void Main(){Console.WriteLine("Starting thread1");thread1 = new Thread(ThreadProc);thread1.Name = "Thread1";thread1.Start();Console.WriteLine("S...

c# – 在SetWindowPos()中使跨线程操作无效【代码】

我试图从一个不同的线程访问一个表单到创建表单的表单,最后得到一个错误:Cross thread operation not valid码:public static void MakeTopMost(Form form) {SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); }我正在传递一个在另一个线程中运行的表单.我试过测试InvokeRequired,但它总是假的. 我是线程新手.解决方法:确保您正在为InvokeRequired测试正确的对象:public static void MakeTopMost(Form form)...

C#多线程 – 使用什么方法?

我的目标是编写一个程序,根据给定的用户输入处理任意数量的任务. 假设在这种情况下,任务数量为1000. 现在,我希望能够生成动态数量的线程并逐个开始处理任务. 我认为我需要使用“同步”方法,而不是“异步”方法,以便在一个任务出现问题的情况下,我不希望它减慢其余任务的完成速度. 我将用什么方法来实现上述目标?信号灯?线程池?如何确保线程不会尝试启动已由另一个线程处理的任务? “锁定”会处理这个吗? 我们将非常感谢代码示...

C#如何杀死父线程【代码】

父母有几个子线程. 如果用户单击停止按钮,则应使用所有子线程终止父线程.//calls a main thread mainThread = new Thread(new ThreadStart(startWorking));mainThread.Start(); ////////////////////////////////////////////////startWorking() {ManualResetEventInstance = new ManualResetEvent(false);ThreadPool.SetMaxThreads(m_ThreadPoolLimit, m_ThreadPoolLimit);for(int i = 0; i < li...

c# – 当多线程时,循环索引超出范围ArgumentOutOfRangeException【代码】

我得到了一些奇怪的行为……当我在ThreadTest方法中迭代dummyText List时,我得到一个超出范围异常的索引(ArgumentOutOfRangeException),但是如果我删除了线程并且我只是打印出文本,那么一切正常精细. 这是我的主要方法:public static Object sync = new Object(); static void Main(string[] args) {ThreadTest();Console.WriteLine("Press any key to continue.");Console.ReadKey(); }此方法抛出异常:private static void Thre...

c#线程声明【代码】

我看到以下声明:ThreadStart myThreadDelegate = new ThreadStart(Work.DoWork); Thread myThread = new Thread(myThreadDelegate); myThread.Start();他们可以简化如下吗?Thread myThread = new Thread(new ThreadStart(Work.DoWork)); myThread.Start();如果是,那么第二种方法是什么?每种方法的优缺点是什么?解决方法:它甚至可以简化为:var myThread = new Thread(Work.DoWork); myThread.Start();没有太大的区别.在您的第一...

c# – 线程无法按预期启动【代码】

我正在尝试进行测试,看看是否有某些技能.using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApplication2 {class timerup{public bool timeup = false;}class Program{public static void timer(){for (int i = 1; i < 3; i++){System.Threading.Thread.Sleep(1000);if (i == 5){object a;a = true;a = new timerup();timerup ClassRef;Clas...

c# – 如何从CLR线程池而不是ASP.NET池创建ASP.NET页面中的线程?

如果我在ASP.NET页面上创建一个新线程,则IsThreadPoolThread属性为true.第一个问题是,它来自ASP.NET池还是CLR池?第二个问题是,如果是来自ASP.NET池那么如何从CLR创建一个线程而不使用ASP.NET池?我需要一个长期运行请求的同步解决方案(full story).解决方法:首先,ASP.NET线程池和CLR线程池之间没有区别. ASP.NET处理CLR线程池上的页面,因此您的ASP.NET页面将始终具有IsThreadPoolThread == true. 我很好奇你是如何创建你的线程的....

c# – 使线程等待退出而不诉诸Thread.Sleep()【代码】

在我的一个应用程序中尝试简单的线程操作时,我遇到了一个问题,试图绕过我做错的事情. 这就是我所追求的:我希望主线程产生一个单独的线程;单独的线程将打开一个程序,为该程序提供一个参数(文件名),然后一旦该程序关闭,子线程将终止,主线程可以继续它的工作.我已经创建了一个非常简单的代码示例来说明.确实,它甚至不是一个单独的线程,它只需要等到程序完成它的工作.我在这做错了什么?非常感激任何的帮助!class Program {static vo...

c# – .net多线程学习资料

任何人都可以在.net上分享一些用于多线程的学习资料吗? 编辑:我不想学到太多细节解决方法:我推荐Joe Duffy的Concurrent Programming On Windows.同时跟上PFX team blog.