草庐IT

rb_thread_fd_select

全部标签

c# - "Current thread must be set to single thread apartment (STA)"将字符串复制到剪贴板时出错

我试过来自HowtocopydatatoclipboardinC#的代码:Clipboard.SetText("Test!");我得到这个错误:Currentthreadmustbesettosinglethreadapartment(STA)modebeforeOLEcallscanbemade.EnsurethatyourMainfunctionhasSTAThreadAttributemarkedonit.我该如何解决? 最佳答案 如果您无法控制线程是否以STA模式运行(即测试、插件到其他应用程序或只是一些随机发送该调用以在无

c# - 为什么 `.Select(...).Last()` 被优化,而 `.Select(...).Last(...)` 没有被优化?

考虑以下枚举器:varitems=(newint[]{1,2,3,4,5}).Select(x=>{Console.WriteLine($"inspect{x}");returnx;});这会产生元素[1,2,3,4,5],在它们被消耗时打印出来。当我调用Last此枚举器上的方法,它会触发仅访问单个元素的快速路径:items.Last();inspect5但是当我将回调传递给Last时,它从头开始遍历整个列表:items.Last(x=>true);inspect1inspect2inspect3inspect4inspect5查看.NETCore源代码,我发现:Last(IEnume

c# - 什么时候用Task,什么时候用Thread?

我刚刚问了有关Task的问题,但意识到我实际上想问更一般的问题。有人可以总结一下任务和线程的优缺点。如何理解我应该使用任务还是线程? 最佳答案 Task是以异步方式执行某事的命令。Thread实际上是OS内核对象,它执行所请求的内容。将Task想象成一个聪明的线程聚合器/组织器,它“知道”在您的CPU上同时运行多少任务更好。它只是比多线程的常见实现更聪明(这就是为什么建议选择Microsoft的原因)。此功能可帮助您以更轻松的方式管理Threads。也看看这个ShouldiuseThreadPoolsorTaskParallelLi

c# - 为什么 GC System.Threading.OverlappedData 需要这么长时间?

我正在通过内存分析器运行我的应用程序以检查是否有泄漏。事情似乎有点好,但我得到了很多这些OverlappedData,它们似乎在终结器队列中徘徊,几乎什么都不做。它们是重叠IO的结果,已通过关闭连接两端的底层NetworkStream取消。网络流本身被释放。任何地方都没有NetworkStream的实时实例。通常,它们Root于称为OverlappedDataCacheLine的东西。我做的第一件事就是在回调中调用EndRead,所以没有调用BeginRead应该没有相应的EndRead。这是一个非常典型的外观,表明谁将它从工具中取出最后它确实得到了GC,但它需要永远-当我开始大约一千

c# - 如何优雅地停止 System.Threading.Timer?

我有一个用C#实现的Windows服务,它需要经常做一些工作。我已经使用System.Threading.Timer实现了这一点,该回调方法负责安排下一个回调。我无法优雅地停止(即处理)计时器。以下是您可以在控制台应用程序中运行的一些简化代码,可以说明我的问题:constinttickInterval=1000;//onesecondtimer=newTimer(state=>{//simulatesomeworkthattakestensecondsThread.Sleep(tickInterval*10);//whentheworkisdone,schedulethenextcal

c# - 从 WindowsIdentity 和 Thread.CurrentPrincipal 检索 WindowsPrincipal 之间有什么区别?

我正在尝试弄清楚为什么基于属性的安全性在WCF中没有像我预期的那样工作,我怀疑它可能与以下内容有关:AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);varidentity=newWindowsIdentity("ksarfo");varprincipal=newWindowsPrincipal(identity);Console.WriteLine("\nCheckingwhethercurrentuser["+identity.Name+"]ismemberof["+groupN

c# - 是否有用于 Where 和 Select 的 (T, int) 重载的 LINQ 语法?

查询varq=fromelemincollectionwheresomeCondition(elem)selectelem;翻译成varq=collection.Where(elem=>someCondition(elem));是否有可转换为以下内容的LINQ语法?varq=collection.Where((elem,index)=>someCondition(elem,index)); 最佳答案 不,没有LINQ语法。一个简单的解决方法是:varq=fromelemincollection.Select((x,i)=>new{x

c# - 从 ADO.NET 调用 Oracle 时批处理多个 select 语句

我想批处理多个select语句以减少到数据库的往返次数。该代码看起来类似于下面的伪代码。它在SQLServer上完美运行,但在Oracle上不起作用-Oracle提示sql语法。我环顾四周,发现从Oracle返回多个结果集的唯一示例是使用存储过程。是否可以在不使用存储过程的情况下在Oracle中执行此操作?我正在使用MSOracle数据提供程序,但如果需要可以使用ODP.Net。varsql=@"select*fromtable1select*fromtable2select*fromtable3";DbCommandcmd=GetCommand(sql);using(varreade

c# - 相当于 LINQ 的 Select 命令的 Powershell?

我正在尝试运行以下Powershell脚本。import-moduleActiveDirectory$computers=Get-ADComputer-filter*-SearchBase"OU=myOU,DC=vw,DC=local"|select-objectnameInvoke-Command-ComputerName$computers-ScriptBlock{gpupdate/target:Computer}问题是$computers不是-ComputerName预期的string[]。它实际上是一组ADComputer,带有一个名为name的参数。#Get-ADComput

c# - 使用 Linq Select 将实体映射到 DTO 的最简洁方法?

我一直在努力想出一种干净且可重用的方法来将实体映射到它们的DTO。这是我想出的例子以及我被困的地方。实体publicclassPerson{publicintID{get;set;}publicstringName{get;set;}publicAddressAddress{get;set;}//OtherpropertiesnotincludedinDTO}publicclassAddress{publicintID{get;set;}publicstringCity{get;set;}//OtherpropertiesnotincludedinDTO}DTOpublicclassP