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

C#如何及时停止线程?【代码】

我有一个用户控件,其中包括计时器.当timer事件运行时,它将调用一些线程. 用户控制class MyControl {public Timer iTime{get;set;}Timer tmr;public MyControl{tmr = new Timer();}// Some Properties } }主要表格class MyForm {Thread thd;MyControl cls = new MyClass();cls.iTime.Tick += new EventHandler(iTime_Tick);void iTime_Tick(object sender, EventArgs e){thd = new Thread(delegate() { doWork(1); });thd.Start();t...

C#/.NET 线程池ThreadPool多线程实现【代码】

线程池简介: 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但...

c# – 通过Response.End()在ASP.NET中创建和中止线程有什么害处吗?【代码】

我需要进行COM调用,并且只想等待x秒才能返回调用.如果呼叫没有在x秒内返回,我想结束请求. 创建一个线程来进行调用.string output = null; Thread t = new Thread(() => { output = SomeHelper.DoWork(); }); t.Start(); t.Join(timeout);if (string.IsNullOrEmpty(output)) this.Send500();结束响应的方法.protected void Send500() {Response.ClearHeaders();Response.ClearContent();Response.Status = "500 Serv...

在C#中测量线程的执行时间

在我的应用程序中,我正在执行一个新的.NET线程,在该线程中,我正在完成一项任务. 我使用秒表来测量执行时间,但是秒表测量OS的所有线程的执行时间(坚果只是我的线程的执行时间).我想要一种方法来衡量我创建的线程执行自己的指令所花费的时间. 在.NET中有这样的测量方法吗?解决方法:没有办法只在托管代码中执行此操作,但您可以使用PInvoke QueryThreadCycleTime或GetThreadTimes.有一点要记住 – 不要求托管和本机线程之间必须存在一...

c# – wpf窗口(ui)被长渲染操作阻止 – 可以使用后台线程进行渲染吗?【代码】

渲染操作处于活动状态时,应用程序窗口会阻塞.即何时设置ContentControl的Content属性.绘制用户控件,该用户控件是内容的DataTemplate.冻结持续5到10秒,具体取决于所使用的PC. 这个用户控件不是太复杂(大约250个简单的控件 – 图像,文本框,文本块,按钮等).布局远非完美,我没有写,我既没有时间,也没有优化布局,因为问题最多可以减少. 我能够完成的最好的事情是将控件包装在一个’容器’中,该容器设法绘制一个加载动画并在ui / app窗口...

c# – 所有GUI线程的Application.ThreadException事件【代码】

我有一个WinForms应用程序,它创建了多个表单,每个表单都在自己的GUI线程中(不是主GUI线程).我想处理所有这些表单的Unhandled Exception事件(Application.ThreadException)来处理任何错误.我还想处理工作线程的异常 – 这一点似乎工作正常,但我仍然遇到GUI线程异常的问题: Program.cs中:[STAThread] static void Main() {AttachExceptionHandlers();Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefa...

c# – 以下线程是否安全?【代码】

我有以下代码,并想知道它是否是线程安全的.我只在我从集合中添加或删除项目时锁定,但在迭代集合时不锁定.迭代时锁定会严重影响性能,因为该集合可能包含数十万个项目.有什么建议可以使这个线程安全吗? 谢谢public class Item {public string DataPoint { get; private set; }public Item(string dataPoint){DataPoint = dataPoint;} }public class Test {private List<Item> _items; private readonly object myListLock = new obj...

c# – 在BackgroundWorker中休眠的线程【代码】

我写了一个简单的应用程序,使用BackgroundWorker将100000行“Hello World”添加到列表中. 下面是我的后台工作人员在一个单独的线程中所做的工作代码:private void BgWorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs){int min = 0;foreach (var hw in hwList){//new ManualResetEvent(false).WaitOne(1);Thread.Sleep(1);int progress = Convert.ToInt32((Double)min / hwList.Count * 100);min++;bgWorker.Report...

c# – 无法使用线程写入文件【代码】

我正在编写一个重复执行任务的Windows服务(C#).我正在使用一个线程来完成我的要求.现在我需要维护一个日志文件来保存有关操作的日志. 我的服务类如下public partial class CPEService : ServiceBase {static ServiceBot bot = new ServiceBot();static ProgramLog logger = new ProgramLog();//ProgramLog Objectprivate static bool state = true;//private static int count = 1;//private System.Timers.Timer timer;public CPE...

c# – 如何保留并稍后恢复线程的执行状态?【代码】

我有一个不寻常的场景,我需要能够暂停并稍后恢复线程的执行状态,可能在不同的线程上恢复它. 有两个函数完全符合我的要求,Thread.GetCompressedStack和Thread.SetCompressedStack,但两个都被弃用,没有提供替代方案. MSDN引用CompressedStack.Capture,但它不允许恢复捕获的堆栈. 我有什么方法可以做到这一点吗?解决方法:CompressedStack不是CLR执行堆栈.不做你想要的. 基本上,你不能按字面意思这样做. 但是,感谢等待,如果您可以使整...

使用委托进行交叉线程的C#麻烦【代码】

我有一个问题,使用委托从不是主窗体线程的线程更改文本框. 我有两个类,一个带有UI的主Form1.cs类和另一个类,LINClass.cs,我写了一个设备函数.在Form1中,我启动了一个持续轮询设备的后台工作程序,以及另一个从设备中检索数据的线程(RXTask()),这两个线程的所有功能都来自LINCLass.cs. 从设备检索数据的线程包含一个委托,该委托指向允许更改Form1文本框的Form1.cs函数:public class LINClass : Form {private delegate void FormUpd...

C#中的多线程加密【代码】

我是加密的新手,并使用以下方法加密文件:private static void encryptFile(string filePath, byte[] password, byte[] salt) {Rfc2898DeriveBytes rdb = new Rfc2898DeriveBytes(password, salt, 1000);AesManaged algorithm = new AesManaged();byte[] rgbKey = rdb.GetBytes(algorithm.KeySize / 8);byte[] rgbIV = rdb.GetBytes(algorithm.BlockSize / 8);GCHandle keyHandle = GCHandle.Alloc(rgbKey, GCHandleType.Pinned);G...

c# – .NET TPL数据流源中的线程安全【代码】

出于好奇,我正在查看.NET TPL的“数据流”库的某些部分的实现,我遇到了以下片段:private void GetHeadTailPositions(out Segment head, out Segment tail,out int headLow, out int tailHigh){head = _head;tail = _tail;headLow = head.Low;tailHigh = tail.High;SpinWait spin = new SpinWait();//we loop until the observed values are stable and sensible. //This ensures that any update order by other methods can be ...

c# – Task.Run继续在同一个线程上导致死锁【代码】

考虑以下我将要同步等待的异步方法.等一下,我知道.我知道它被认为是不好的做法和causes deadlocks,但我完全是conscious并采取措施通过包装代码Task.Run来防止死锁.private async Task<string> BadAssAsync(){HttpClient client = new HttpClient();WriteInfo("BEFORE AWAIT");var response = await client.GetAsync("http://google.com");WriteInfo("AFTER AWAIT");string content = await response.Content.ReadAsStringAsync();W...

c# – 如何检测线程是否有窗口句柄?【代码】

如何以编程方式检测线程是否在给定进程上有窗口句柄? 间谍给了我这个信息,但我需要以编程方式进行. 我需要在C#中执行此操作,但.net诊断库不会向我提供此信息.我想间谍正在使用一些我不知道的Windows api调用. 我可以访问我正在尝试调试的系统代码.我想定期嵌入一些由定时器调用的代码,它将检测有多少线程包含窗口处理并记录此信息. 谢谢解决方法:我相信你可以使用win api函数:EnumWindowsProc遍历窗口句柄和GetWindowThreadProce...