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

c# – 为什么我的线程不会停止?【代码】

我有以下代码,我使用ParameterizedThreadStart对象作为构造函数参数启动一个Thread:static object obj = new object();static void Main(string[] args) {ParameterizedThreadStart start = (o) =>{ThreadTest(o);};var t = new Thread(() => start(obj));t.Name = "t";t.Start();Thread.Sleep(3000);obj = null;// Why the Thread (t) continue here??Console.ReadKey(); }private static void ThreadTest(object o) {while (o !...

c# – 基本线程问题【代码】

如果我有课public Class foo {public foo(){myclass = new myclass(param)myclass.initiateState();val = myclass.getValues();} }Class.initiateState()是一个冗长的进程,它在我的GUI构造函数中运行,我想开始用一个线程运行,但是下一行转到同一个类来获取一些数据,但如果我运行第一行新线程然后在它完成之前执行. 我怎么解决这个问题?解决方法:制作BackgroundWorker. 在DoWork事件方法内,添加myClass.initiateState()调用.在RunW...

C#阻止从其他线程访问所有对象方法【代码】

我有一个对象,一次只能由一个Thread使用.例如,我的对象包含3个方法A,B和C,如果线程访问方法A,我想锁定对象(所有方法/属性都被锁定). 主要的困难是我无法修改该对象的代码.我必须在我调用对象的地方阻止多线程访问. 我的第一个想法是使用单例模式,但我没有设法让它工作!解决方法:如果无法更改对象的代码,则必须处理对象外部的锁定.例如,您可以将其封装在另一个类中(可能将其隐藏在接口后面),并让该包装类应用同步:public class Fo...

c# – 使用对象以外的东西锁定线程【代码】

当使用锁时,你锁定的东西必须是一个对象.例如,这是合法的static DateTime NextCleanup = DateTime.Now;const TimeSpan CleanupInterval = new TimeSpan(1, 0, 0);private static void DoCleanup(){lock ((object)NextCleanup){if (NextCleanup < DateTime.Now){NextCleanup = DateTime.Now.Add(CleanupInterval);System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(cleanupThread));}}return;}解决...

c# – 简单的线程编程【代码】

我已经开始在c#中使用线程,但现在需要帮助,这是我的代码:public partial class Form1 : Form {public Form1(){InitializeComponent();DoCount();}public void DoCount(){for (int i = 0; i < 100; i++){objTextBox.Text = i.ToString();Thread.Sleep(100);}} }它是一个简单的胜利形式与文本框,我想看到“计数”,但正如你在我的代码中看到的,文本框显示我99,它计数到99然后显示..我会想,我必须在一个新的线程中管理这个,但不知道如...

c#中多线程同步Lock(锁)的研究以及跨线程UI的操作 (转)【代码】【图】

https://www.cnblogs.com/tommyheng/p/4104552.html 本文只针对C#中,多线程同步所用到的锁(lock)作为研究对象。由于想更直观的显示结果,所以,在做demo的时候,就把多线程通过事件操作UI的代码也写了出来,留作备忘和分享吧。 其实多线程的同步,使用同步锁的方法用了好多次,今天无意中看到MSDN中,建议用:1 private static readonly object locker1 = new object(); 2 private readonly object locker2 = new object();备注:...

c# – 等待线程完成【代码】

private void button1_Click(object sender, EventArgs e){for (int i = 0; i < 15; i++){Thread nova = new Thread(Method);nova.Start();}listBox1.Items.Add("Some text");}private void Method(){for (int i = 0; i < 15; i++){Console.WriteLine(i);}}这段代码写的:有些文字然后是数字111222333 …..我想它写111122223333 ….然后在最后一些文字.有可能用线程(父线程等待子线程)吗?还是我必须使用别的东西?解决方法:我建议...

C#手动线程

有没有人有任何好的资源显示在C#中创建无限数量的线程而不使用ThreadPool? 我意识到有人可能质疑具有数百或数千个线程的系统的体系结构,所以让我解释一下CPU / OS将使这项工作没有实际意义的任务. 我需要测试大约2500个网址.其中一些非常慢:响应时间超过10秒.无论如何,网络延迟占每项操作的99.99%. 我想尽快测试所有2500个网址. 我连接了一个测试,在他们自己的线程中测试每个测试. 问题是我正在使用ThreadPool,我认为默认限制是...

c# – 如何多线程“跨层”具有相关ID的单例而不锁定?【代码】

因此,我们使用具有相关ID的公共状态上下文单例进行集中式日志记录.目的是在整个过程中跟踪id并关联不同的层. 状态上下文由多个dll和多个用户访问. 多线程发挥作用时遇到困难: >进程1已被用户1触发>相关ID设置为{1}> DLL A访问状态上下文并获取相关ID {1}>在流程1完成之前,流程2已由用户2解雇>关联ID设置为{2}> DLL B来自第一个进程访问状态上下文,其相关标识为{2}时应为{1} 我们如何解决这个问题? 我们认为锁定不是我们的解决方案...

c# – 异步编程中的线程状态管理

我是使用C#在.Net中进行异步编程的新手.到目前为止我所了解的是: 使用异步编程,等待Web服务或数据库返回数据的线程将被释放,以便在收到数据之前为新请求提供服务. 收到数据后,线程将重新启动并继续处理该调用后的代码. 现在,我想详细了解如何为线程管理状态,以便它可以从异步调用的点开始执行. 如果它使用堆栈来处理它,有人可以让我深入了解这个过程吗? 谢谢, Mayank解决方法:Now , I wanted to know in details How the state i...

c# – 线程挂起,直到我附加调试器【代码】

我有一个使用WCF的服务.在内部,它有一个包含列表的字典,您可以添加或从不同的端点获取子集. 代码是这样的:List<Data> list = null;try{locker.EnterReadLock();list = internalData[Something].Where(x => x.hassomething()).ToList();}finally{locker.ExitReadLock();}foreach (var y in list){result[y.proprty1].Add(y.property2); // <-- here it hangs}return result;所以internalData用ReaderWriterLockSlim锁定所有操作,re...

c# – JwtSecurityTokenHandler线程是否安全【代码】

我正在使用JwtSecurityTokenHandler在aspnet核心web api应用程序中发出令牌:JwtSecurityToken token = BuildJwtSecurityToken(...); public string toks = new JwtSecurityTokenHandler().WriteToken(token);每次请求和创建令牌时,都会实例化一个新的JwtSecurityTokenHandler,我可以使用它的全局实例并将其用于每个令牌生成吗?private JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); private GenToken(JwtSe...

c# – DirectShow / WPF线程问题

我正在使用WPF和DirectShow编写应用程序并遇到了棘手的问题.我的应用程序在使用DirectShowNet(DS的C#包装类)编写的静态类中通过静态方法Start()和Stop()来使用DS.我的WPF窗口中有一个Windows窗体面板(通过WindowsFormsHost对象),我需要将图形渲染到.以下是应用程序的一般流程:Start()方法构建图形并启动它;我传递了我的Windows窗体面板的句柄,并使用IVideoWindow界面渲染它. Start()返回,图表在后台运行.在某些时候,调用Stop();此...

c# – FIFO / QUEUE,带缓冲区和线程安全

我收到了大量需要插入数据库的统计数据.我想实现某种保存所有数据的Queue或FIFO类当它到达特定计数(缓冲区)时,它将通过批量插入将该数据发送到SQL.这应该是线程安全的. 我知道如何制作批量插入物.有关如何制作队列/列表的建议吗? 谢谢解决方法:.net基类库具有ConcurrentQueue(Of T).只需导入System.Collections.Concurrent. 编辑:如果必须使用队列,则可以创建一个包装类/模块,在计数器(缓冲区)达到一定量时触发事件.

c# – 异步CTP:Task.Factory.StartNew是否使用IO完成线程?【代码】

我正在使用Async CTP并编写了一些这样的WCF服务操作代码.public async Task<string> GetDetailsfromDatabase(string name){return await Task.Factory.StartNew(() => {return CallDatabaseandGetDetails(name);});}调用StartNew使用线程池线程来从数据库中获取数据.在db操作运行时线程是否被阻塞或者它是否使用了IO完成线程?解决方法:您需要使用TaskFactory.FromAsync方法: 例: http://mstecharchitect.blogspot.com/2011/02/p...