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

c#-温莎单例的这种依赖关系线程安全吗?【代码】

无论如何,我都不是异步编程方面的专家,所以我想验证我是否有问题. 我有一个Web API应用程序,该应用程序使用Castle Windsor,但也对某些ASP.NET函数使用了内置的HttpConfiguration.Services管道.在这种情况下,我正在注册一个全局异常处理程序.这是代码:protected void Application_Start() {//ASP.NET registers this instance in a ConcurrentDictionary and treats it as a singletonconfig.Services.Replace(typeof(IExceptionHa...

c#-通过多个线程调用静态方法-它们是否可以互相插入输入参数【代码】

我的代码被AJAX UI(多线程)调用,并在数据处理后通过Json发送输出.最近,在重构代码时,由于没有使用任何静态/共享数据,我们已将许多常见和重复的方法转移到一个单独的文件中,在此文件中将它们设为静态.以下是我们的静态方法的示例设计:public class Helper {public static C Method1(List<A> aList, List<B> bList){C objC = new C();// Create ObjC based on inputs aList and bListreturn objC;} }现在,我的理解是,以下调用将没有...

c#-WinRT上的Rx-在UI线程上分派【代码】

我目前刚刚开始使用Rx,到目前为止,它非常有用.但是,从异步方法创建可观察对象并用结果更新UI时遇到了问题.我(不出所料)通过以下代码收到RPC_E_WRONG_THREAD错误:IDisposable service = null;service = Observable.FromAsync(fn).Subscribe(videoColl => {foreach (var video in videoColl.Videos){// _videos is an ObservableCollection bound to a GridView's ItemsSource property_videos.Add(video.SmallImageUrl);} });我看过...

C#窗体/UI线程委托【代码】

很多时候写windows程序都需要结合多线程,在C#中用如下得代码来创建并启动一个新的线程。Thread thread = new Thread(new ThreadStart(ThreadProc));//实例化一个线程thread.IsBackground = true;//将线程改为后台线程thread.Start();//开启线程 但是很多时候,在新的线程中,我们需要与UI(Windows窗体设计器用户界面)进行交互,在C#中不允许直接这样做。可以参考MSDN中的描述。 “Windows 窗体”使用单线程单元 (STA) 模型,因为...

C#-Web API-为每个线程设置HttpRequestMessage ID吗?【代码】

我有一个用C#编码的Web API. Web API使用与其他内部组件共享的功能.它取决于单线程流,并使用线程本地存储来存储对象和会话信息.请不要说它是好是坏,这就是我要处理的. 在网络API中,我已使用SendAsync实现了自定义消息处理程序(DelagatingHandler)protected async override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)这是基于...

C#基础之多线程与异步【代码】

1.基本概念 多线程与异步是两个不同概念,之所以把这两个放在一起学习,是因为这两者虽然有区别,但也有一定联系。 多线程是一个技术概念,相对于单线程而言,多线程是多个单线程同时处理逻辑。例如,假如说一个人把水从A地提到B点可看作是单线程,那么如果两个人同时去做事(可以是相同的一件事,也可以是不同的一件事)就可以看作是两个线程。 异步:记得读书时学过一篇课文叫《统筹方法》,里面讲述煮茶喝的过程,如下:...

C#-从非UI线程更新控件【代码】

伙计们,我知道这个问题已经被问过很多次了,但是我仍然找不到一个对我有意义的答复. 我有一个表格,上面有400多个控件. 我有一个后台线程,它轮询一堆设备并收集各种要在表单上显示的数据. 然后,我将一种方法称为“ UpdateDisplay(string [] data)”.这个例程获取字符串数组data []中的所有信息,并填写表单上的所有组件.我有Labels,TextBoxes被填充.Panels和TableLayouts以及其他控件正在显示和隐藏. 数百个! 如果我必须测试每个组件...

C#以CPU友好的方式使事件处理线程保持活动状态【代码】

我想并行运行10个线程.每个线程均包含处理串行端口通信的代码(使用“ SerialPort”类).一些功能是: >用于处理RS232设备返回数据时引发的事件的代码.>用于处理计时器事件的代码,当RS232设备未在预定义的时间范围内返回数据时,将引发该计时器事件. 如您所见,每个线程处理一些异步事件,这些事件是从线程本身初始化和启动的.因此,线程需要保持活动状态,直到引发并处理所有事件为止.根据从RS232设备接收到的数据,线程知道何时完成工作,...

c#-第二个线程能否仅因为第一个线程名为Monitor.Wait使用相同的同步锁而进入相同的临界区?【代码】

请告诉我我是否认为还好. >不同的线程无法使用以下命令进入相同的关键部分相同的锁只是因为第一个线程名为Monitor.Wait,对吧? Wait方法仅允许其他线程获取相同的监视器,即相同的同步锁,但仅用于不同的关键部分,而从不用于相同的关键部分. 我的理解正确吗? 因为如果Wait方法意味着任何人现在都可以输入使用相同的锁的同一关键部分,那么那将失败整个同步的目的,对不对? 因此,在下面的代码中(用记事本编写,因此请原谅错别字),Threa...

在C#中`??`线程安全吗?【代码】

简单的问题:是 ”??”和“?”.和“?:”线程安全?我可以信任他们吗?还是我应该使用其他线程安全解决方案?例如此代码:public static T Instance => _Instance ?? (_Instance = CreateInstance());是线程安全的吗?解决方法:由于竞争条件,它不是线程安全的. (例如,线程A检查值,发现它为空,线程B检查值,发现它为空,线程B通过调用CreateInstance()初始化值,线程A通过调用CreateInstance()初始化值.) 单例的线程安全初始化的正...

c#-Rx-使用新线程上的每个项目【代码】

这个问题已经在这里有了答案: > NewThreadScheduler.Default schedules all work on same thread 1个> How do I run a simple bit of code in a new thread? 15个假设我有这样的代码:static void Main(string[] args){var scheduler = NewThreadScheduler.Default;var enumerable = Enumerable.Range(0, 100);enumerab...

c#-在UI线程上调用异步方法【代码】

我正在尝试使用IdentityServer身份验证创建WPF客户端.我正在使用他们的OidcClient进行登录.我的应用程序同步时整个异步,并且如果不付出巨大的努力就无法重构.呼唤var result = await _oidcClient.LoginAsync();不等待结果.调用Wait()或.Result会导致死锁.将其包装到其他Task.Run时,该方法未在UI线程上运行(它会打开带有登录对话框的浏览器). 您有什么想法,如何解决呢?我需要编写自定义同步OidcClient吗?解决方法:与需要在不进行大...

c#-WCF是否在同一线程中执行Singleton WCF服务中的操作?【代码】

我有标有ServiceBehavior属性的服务[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple)]此服务中的操作是否有可能由同一线程执行? 我将重要数据存储在ThreadLocal变量中,该变量将用于单个操作执行.解决方法:没有, 每个请求都在不同的线程中回答. InstanceContextMode.Single属性指定服务为每个请求使用相同的对象(及其成员).

c#-使用线程,事件和私有方法测试类

普遍共识 关于测试复杂类和私有方法的主题,我已经做了大量的阅读. 普遍的共识似乎是: >“如果您需要测试私有方法,那么您的类设计不佳”>“如果您的课程很复杂,那么您需要将其分开” 所以,我需要你的帮助. 问题类 所以我有一个相对简单的类,它的长期工作是: >轮询数据源>做一些非常简单的数据映射>将数据发送到其他地方 附加地: >它需要能够在某些错误的情况下重试各种任务,从而具有足够的容错能力. 测试问题 该类的重点是抽象大...

C#线程池 ThreadPool【代码】

什么是线程池 大家都知道,我们在打开一个应用的时候,操作系统是要做很多的事情的,动态链接、装载、分配虚拟空间、等等等等,其实一个应用的打开同时也伴随着一个进程的建立。 进程的建立是需要时间的,在进程上开线程也是需要消耗CPU时间,操作系统需要分配给新开的线程地址空间、栈空间、寄存器等,在线程结束的时候,操作系统又将这些东西回收(着同样需要消耗时间)。 所以我们在多线程的处理中如果遇到要很多次地开启线程去处...