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

c# – 使用Semaphore调用WaitOne是否释放调用线程来执行其他工作?【代码】

我的应用程序需要每分钟为每个租户执行一些任务.这些是即发即弃操作,因此我不想使用Parallel.ForEach来处理这个问题. 相反,我循环遍历租户列表,并启动ThreadPool.QueueUserWorkItem来处理每个租户任务.foreach (Tenant tenant in tenants) {ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessTenant), tenantAccount); }此代码在生产中完美运行,通常可在5秒内处理超过100个租户. 但是在应用程序启动时,这会导致100%的CPU利用...

c# – 绑定,线程和winforms【代码】

如何将ProgressBar绑定到另一个线程中更新的类的属性? 以下代码示例显示了我的第一次天真尝试.它不起作用,因为我得到有关跨线程通信的运行时错误.我想我需要以某种方式使用Invoke,但我不确定如何使用Binding类.using System; using System.Drawing; using System.Windows.Forms; using System.ComponentModel; using System.Threading;class ProgressForm : Form {private ProgressBar pbProgress;public ProgressForm(ref LongOp...

C#:在单独的线程上预加载表单

我有一些表单,需要一些时间来打开,因为他们目前从他们的Load事件处理程序中的数据库中获取一些东西. 是否有可能以某种方式将表单加载到一个单独的线程中,并在完成后将其显示给用户? 如果加载它们以便不能触发Load事件处理程序,那么使用IPreloadable接口可能会使用Preload方法执行该操作,然后将缓慢加载的内容移动到该处理中.如果可以从单独的线程中显示表单,那么……我猜需要使用Invoke或类似的东西?解决方法:如果在不同的线程上...

使用C#.NET中的OCX进行线程安全【代码】

我作为开发人员已经有一段时间没有使用OLE / COM,但我目前需要使用C#程序中的一些第三方OCX代码库. C#程序使用线程(它是一个TCP套接字服务器). OCX标记为公寓线程模型.从我的阅读中,我得出结论,如果我小心地为每个线程创建每个OCX的一个实例,并且只从创建它的线程中使用该实例,我应该没问题. 我也做了: – myThread.SetApartmentState(ApartmentState.STA);在开始每个线程之前. 这应该足以确保安全使用OCX吗? 我看到的症状是线程...

c# – 如何使方法在“后台”中运行(线程化?)【代码】

我目前有一些代码循环查找特定短语的文本文件.但是,当此方法运行时,整个应用程序将锁定.我假设因为它是循环的,这就是我想要的. 我希望这在后台发生,因此仍然可以进行常规方法和用户与应用程序的交互. 如何完成/改进?private void CheckLog() { while (true){// lets get a breakThread.Sleep(5000); if (!File.Exists("Command.bat")){continue;}using (StreamReader sr = File.OpenText("Command.bat")){string s = "";while (...

c# – 按ID结束线程

我正在尝试处理一些线程.我看到可以从线程中获取唯一的ID或设置线程名称.但是如何通过他的ID结束/中止线程呢?我不相信.NET有他自己的能力做到这一点吗?也许Win32-API?解决方法:您可以使用Process.GetCurrentProcess().线程获取当前进程的所有操作系统线程列表(由the ProcessThread class表示),但不能以这种方式中止它们. 另一方面,您可以中止托管线程(由the Thread class表示),但似乎没有办法列出所有线程(除了可能使用非托管调...

我应该如何加载一次图像并在多线程C#应用程序中传递它?

我正在编写一个应用程序,其目的是在文件夹中查找图像并将其呈现给用户,询问如何裁剪它们.随着我每天从语言到语言的所有跳跃,我倾向于让我的最佳实践和概念混乱,这就是这种情况. 程序流程如下:您将看到主窗体,带有浏览按钮(您也可以将文件夹放到其上).当您选择一个文件夹时,它会打开另一个表单,扫描所选文件夹中的.jp [e] g和.tif [f]图像,并将它们显示在列表中,询问您要裁剪哪些文件,以及其他一些图像选项.然后它返回到主窗体,该窗...

c# – 任务/线程中的CredentialsCache.DefaultCredentials

我希望你能帮助我. 我在我的C#4.0应用程序中进行了一些需要身份验证的webrequests.我只是使用CredentialsCache.DefaultCredentials.只要我不通过Task< T> .Factory.StartNew(…)在不同的线程/任务中运行该功能,这就很有用.然后我得到401错误.我假设凭证不会传递给子线程? 如何将凭据传递给任何子任务/线程?解决方法:我假设你正在使用模拟,问题是凭据没有流入任务.通过倾销Windows.Identity.GetCurrent()的值来检查这一点以保存一...

c# – 线程池:跨线程操作无效.【代码】

当涉及到线程时我很新,但是在使用以下代码时我得到一个InvalidOperationException.我知道它正在尝试访问importFileGridView,但这是由创建异常的UI线程创建的.我的问题是,我该如何解决这个问题? GetAllImports可以有一个返回类型吗?如何从UI线程访问临时文件?ThreadPool.QueueUserWorkItem(new WaitCallback(GetAllImports), null);private void GetAllImports(object x){DataSet temp = EngineBllUtility.GetAllImportFiles(con...

c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全而不会丢失数据【代码】

任何使ConcurrentDictionary线程安全的想法,其中值被导出到列表ex,并在该字典被清除之后.这样任何其他线程都无法在导出和清除之间添加数据. 像这样:“List<data> list; list = (List<data>)_changedItems.Values; //get values before clearing _changedItems.Clear();“并且使用函数_changedItems.AddOrUpdate通过其他线程完成添加 现在,如果某个线程在清除行之前将数据对象添加到集合中,则有可能在从字典中获取数据和清除内容之...

c# – WPF:如何在具有延迟时间的单独线程中调用方法

我有一个TextBox,用户可以在其中输入搜索词.它绑定到我的视图模型中的字符串Term属性.我希望在内容发生变化时进行搜索查询.但我想在一个单独的线程中进行查询并延迟. 例如当用户键入字母时,我想等待0.3秒,如果用户在此时间内(0.3秒)更改输入,计时器将重置并重新开始.否则,我启动一个新线程并执行搜索查询.在执行查询时,如果用户再次更改术语,则中止prev查询并重新开始. 我知道如何在带有线程和Timer类的windows-forms中执行此操作....

c# – System.Timer在单独的线程中运行并保持线程限制

我想限制我的多线程WCF服务中的线程数.所以,我使用ThreadPool.SetMaxThread函数.现在,我想使用System.Timers以给定的时间间隔生成事件. 但是,我的服务同时收到许多要在线程池中执行的操作.当我的计时器结束时,操作在ThreadPool中排队(我有时会预期100,000个任务),因此执行起来很慢. 有没有办法在之前执行我过去的事件?例如,通过设置在线程池上排队的优先级任务?或者在线程池之外的事件? 我想在我的服务中保持我的全局线程限制.解...

终止在C#中运行消息循环的工作线程

我在工作线程中使用了SetWindowHookEx()Windows API,并使用Application.Run()接收我运行Application Message Pump的操作系统通知. 现在,我想停止消息泵并退出工作线程,但我没有办法终止线程. 或者,我使用Thread.Abort()方法来终止线程,但这不是推荐的方法来优雅地终止线程. 任何人都可以建议如何从UI线程或主窗体优雅地关闭消息泵,以便工作线程自动返回并退出?解决方法:而不是使用无参数Application.Run使用接受ApplicationContex...

c# – 如何在基于异步/等待的单线程协同程序实现中捕获异常【代码】

是否可以使用异步并等待高雅安全地实现只在一个线程上运行的高性能协程,不浪费周期(这是游戏代码)并且可以将异常抛回协程的调用者(可能是协程本身)? 背景 我正在尝试用C#coroutine AI代码替换(宠物游戏项目)Lua coroutine AI代码(通过LuaInterface托管在C#中). ?我想将每个AI(怪物,比如说)作为自己的协程(或嵌套的协程集)运行,这样主游戏线程可以每帧(每秒60次)可以选择“单步”部分或全部AIs取决于其他工作量. ?但是为了易读性和...

C# 创建线程的多种方式之 线程池和任务 基础知识【代码】

1. 线程池 创建,释放线程都需要消耗很多时间,所以如果有许多的用时较短的小任务需要同时完成且不需要过多的控制,则可以选择线程池来实现,即ThreadPool类. 对于线程所执行的任务来说,可以把线程分为两种类型:工作者线程和I/O线程。工作者线程用来完成一些计算的任务,在任务执行的过程中,需要CPU不间断地处理,所以,在工作者线程的执行过程中,CPU和线程的资源是充分利用的。对于I/O线程,在.Net中通过以Begin开头的方法来...