编辑简单的问题是,我怎样才能让Thread.CurrentPrincipal.Identity.Name让当前用户在WPF中登录?结束编辑我正在尝试调用一个现有方法(不在任何类型的服务中;只是POCO中的一个方法)来检索当前用户:Thread.CurrentPrincipal.Identity.Name这段代码是由其他人编写的,并且(大概)与他的ASP.NETMVC项目一起工作。我正在尝试从WPF中调用相同的方法,但名称现在为空。我能做些什么吗? 最佳答案 将Thread.CurrentPrincipal设置为newWindowsP
我正在编写一个需要长时间休眠的Windows服务(最长休眠时间为15小时,最短时间为30分钟)。我目前正在使用Thread.Sleep(calculatedTime)将我的代码置于sleep模式。Thread.Sleep是最好的选择还是我应该使用计时器?我已经用谷歌搜索了一段时间,但找不到简洁的答案。由于这是一个Windows服务,我不必担心锁定UI,所以我想不出不使用Thread.Sleep的理由。如有任何见解,我们将不胜感激。 最佳答案 我会使用计时器Thread.Sleep,它可能会导致阻塞,从而阻止服务关闭。如果间隔如此广泛
我试过来自HowtocopydatatoclipboardinC#的代码:Clipboard.SetText("Test!");我得到这个错误:Currentthreadmustbesettosinglethreadapartment(STA)modebeforeOLEcallscanbemade.EnsurethatyourMainfunctionhasSTAThreadAttributemarkedonit.我该如何解决? 最佳答案 如果您无法控制线程是否以STA模式运行(即测试、插件到其他应用程序或只是一些随机发送该调用以在无
我刚刚问了有关Task的问题,但意识到我实际上想问更一般的问题。有人可以总结一下任务和线程的优缺点。如何理解我应该使用任务还是线程? 最佳答案 Task是以异步方式执行某事的命令。Thread实际上是OS内核对象,它执行所请求的内容。将Task想象成一个聪明的线程聚合器/组织器,它“知道”在您的CPU上同时运行多少任务更好。它只是比多线程的常见实现更聪明(这就是为什么建议选择Microsoft的原因)。此功能可帮助您以更轻松的方式管理Threads。也看看这个ShouldiuseThreadPoolsorTaskParallelLi
我正在尝试弄清楚为什么基于属性的安全性在WCF中没有像我预期的那样工作,我怀疑它可能与以下内容有关:AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);varidentity=newWindowsIdentity("ksarfo");varprincipal=newWindowsPrincipal(identity);Console.WriteLine("\nCheckingwhethercurrentuser["+identity.Name+"]ismemberof["+groupN
我遇到过间歇性失败的单元测试,因为耗时不是我期望的。此测试的示例如下:Stopwatchstopwatch=newStopwatch();stopwatch.Start();TimeSpanoneSecond=newTimeSpan(0,0,1);for(inti=0;i大部分时间都通过了,但至少有一次失败了,因为:预期:大于等于2999但是是:2998我不明白它怎么可能少于3秒。Thread.Sleep或Stopwatch是否存在我不知道的准确性问题?就像对下面一些问题的更新一样。正在接受单元测试的场景是一个类,它允许调用一个方法来执行某些操作,如果它失败,请稍等片刻并调用该方法。上
当某些事件发生时,如何暂停线程并继续?我希望线程在单击按钮时继续。有人告诉我thread.suspend不是暂停线程的正确方法。还有其他解决方案吗? 最佳答案 你可以使用System.Threading.EventWaitHandle.EventWaitHandle会阻塞,直到收到信号为止。在您的情况下,它将通过按钮单击事件发出信号。privatevoidMyThread(){//dosomestuffmyWaitHandle.WaitOne();//thiswillblockuntilyourbuttonisclicked//co
我什么时候应该使用volatile/Thread.MemoryBarrier()来保证线程安全? 最佳答案 当您想跨线程访问变量而不锁定时,您可以使用volatile/Thread.MemoryBarrier()。原子变量,例如int,总是一次性读取和写入整个变量。这意味着您永远不会在另一个线程更改它之前获得一半的值,而在它更改之后获得另一半。因此,您可以在不同线程中安全地读取和写入值,而无需同步。但是,编译器可能会优化一些读写操作,您可以使用volatile关键字来阻止这些操作。例如,如果您有这样的循环:sum=0;foreach
首先我需要说我是WPF和C#的菜鸟。应用程序:创建Mandelbrot图像(GUI)在这种情况下,我的调度员工作得很好:privatevoidprogressBarRefresh(){while((con.Progress)尝试使用以下代码执行此操作时,我收到了消息(标题):bmp=BitmapSource.Create(width,height,96,96,pf,null,rawImage,stride);this.Dispatcher.Invoke(DispatcherPriority.Send,newAction(delegate{img.Source=bmp;ViewBox.C
首先,我问的不是与C#-AlternativetoThread.Sleep?相同的问题,或AlternativetoThread.SleepinC#?.我认为我没有错误地使用它,并且在特定情况下需要一个真正的替代品。在代码分析运行期间,我看到了一个令人惊讶的违规行为:UsageofThread.Sleep()isasignofflaweddesign.此违规导致PeterRichie'sarticle关于为什么这构成糟糕的设计。我们都知道线程创建是昂贵的,线程中的阻塞意味着对池的争用。我们也知道每个线程都会分配一个meg的内存,所以它应该有一个短的生命周期,阻塞在UI上是邪恶的,使用s