草庐IT

信号的产生

全部标签

c# - 产生一个新线程以打开一个新窗口并从另一个线程关闭它

现在我有C#代码在不同的线程中生成一个新窗口,这有效,但是一旦新生成的窗口打开,它就会关闭并且线程结束。我将如何做到这一点,以便可以从第一个线程关闭新生成的窗口?这是当前生成工作方式的“树”:主线程--使用主线程中的一个函数在单独的线程中启动另一个函数来打开w窗口,导致窗口使用该线程。基本上我只希望两个窗口各有自己的线程。并能够从第一个窗口线程控制生成的辅助窗口。 最佳答案 我敢打赌你正在做的是这样的:newThread(()=>newTestForm().Show()).Start();因为这会使窗口立即消失,就像您描述的那样。试

c# - 为什么重用 DataContext 会对性能产生负面影响?

经过fairamountofresearch还有一些errors,我修改了我的代码,以便在每次查询数据库或插入数据时创建一个新的DataContext。并且频繁查询数据库-对于处理的25万笔交易中的每笔交易,在插入交易之前查询数据库以获得客户ID、部门ID和类别。所以现在我正在尝试优化代码,因为它每秒只处理大约15笔交易。我删除了一些无关的查询并添加了一些索引并将其提高到每秒30个。然后我想即使每个人都说DataContext是轻量级的,但每次事务创建一个新的4次还是要花一些钱,所以我尝试重用DataContext。令我惊讶的是,重用上下文会导致性能下降到每秒10个事务!为什么会这样?

c# - Parallel.ForEach 不断产生新线程

当我在我的程序中使用Parallel.ForEach时,我发现有些线程似乎永远不会结束。事实上,它一遍又一遍地产生新线程,这是我没有预料到也绝对不希望出现的行为。我能够使用以下代码重现此行为,就像我的“真实”程序一样,它们都大量使用处理器和内存(.NET4.0代码):publicclassNode{publicNodePrevious{get;privateset;}publicNode(Nodeprevious){Previous=previous;}}publicclassProgram{publicstaticvoidMain(string[]args){DateTimestar

c# - Environment.CurrentDirectory 在运行已安装的应用程序时产生意外结果

背景:我为我的应用构建了一个安装程序,我所有的dll和内容文件都被正确地复制到C:\ProgramFiles\MyCompany\MyApp目录。当我从VisualStudio运行我的应用程序时,一切正常。但是,当我运行我的应用程序的已安装版本时,我收到了DirectoryNotFoundException。问题似乎出在Environment.CurrentDirectory上。我期望Environment.CurrentDirectory是..."C:\\ProgramFiles\\MyCompany\\MyApp"...但实际上..."C:\\DocumentsandSetting

c# - 如何检查信号量的状态

我想检查Semaphore的状态,看看它是否发出信号(所以如果t发出信号,我可以释放它)。我怎样才能做到这一点?编辑1:我有两个线程,一个等待信号量,另一个应该释放一个信号量。问题是当第一个线程没有等待时,第二个线程可能会多次调用Release()。因此,第二个线程应该检测到它是否调用Release()是否会产生任何错误(如果您尝试释放一个信号量而没有人在等待它,它会产生一个错误)。我怎样才能做到这一点?我知道我可以使用旗帜来做到这一点,但它很难看。有没有更好的办法? 最佳答案 您可以通过调用WaitOne并将超时值0作为参数传递来

c# - 信号量异常 - 将指定的计数添加到信号量会导致它超过其最大计数

我已经有一段时间没有遇到这个SemaphoreFullException了。总结..我在IIS7.5上使用ASP.NETv4.0框架应用程序池(集成)托管了一个应用程序。我正在使用Windows身份验证通过域(isinrole)对我的用户进行身份验证。我看过关于此主题的所有其他线程,其中建议设置Pooling=False。我不想那样做,因为性能优势,我想继续使用池化。我正在使用EntityFramework6来查询数据库,并且我没有在用户代码中的任何位置“处理”dbcontext。看起来问题出在DbConnectionPool代码中。错误在任何给定时刻随机发生。应用程序是否正在使用并不

c# - AutoResetEvent 和 maximumCount = 1 的信号量之间有什么区别吗?

我正在阅读以下文章:http://www.albahari.com/threading而且我无法意识到AutoResetEvent和用maximumCount=1初始化的信号量之间的区别。只是为了看看我是否做对了......这两种构造有什么区别吗?谢谢! 最佳答案 是的,肯定有区别。信号量用于限制对资源或代码块的访问。当WaitOne被调用时,线程将阻塞,直到信号量的计数可用。要进行计数,您可以调用Release。最大计数为1的信号量通常称为二进制信号量。这种性质的信号量只允许从单个线程访问资源或block代码。您可以使用二进制信号

c# - 为什么这个非常简单的 C# 方法会产生如此不合逻辑的 CIL 代码?

我最近一直在深入研究IL,我注意到C#编译器有一些奇怪的行为。以下方法是一个非常简单且可验证的应用程序,它将立即退出,退出代码为1:staticintMain(string[]args){return1;}当我使用VisualStudioCommunity2015编译它时,生成了以下IL代码(添加了注释):.methodprivatehidebysigstaticint32Main(string[]args)cilmanaged{.entrypoint.maxstack1.localsinit([0]int32V_0)//LocalvariableinitIL_0000:nop//Do

PyQt5 信号(Signal)和槽(Slot)(同步和异步)

信号(Signal)和槽(Slot)是PyQt编程对象之间进行通信的机制。每个继承自QWidget的控件都支持信号与槽机制。信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理)内置信号和槽所谓内置信号与槽的使用。是指在发射信号时,使用窗口控件的函数,而不是自定义的函数。信号与槽的连接方法是通过QObject.signal.connect将一个QObject的信号连接到另一个QObject的槽函数。槽函数close为窗口控件函数信号与槽:self.pushButton.clicked.connect(self.close)内置信号和自定义槽使用实例槽函数showMsg为自定义函数

JavaScript Date.toJSON() 产生的日期有错误的小时和分钟

我想打印一个符合ISO-8601标准的日期:YYYY-MM-DDTHH:mm:ss.sssZ所以我使用了以下代码行,但是我得到了意外的输出vardate=newDate(2012,10,30,6,51);print('UTCFormat:'+date.toGMTString());print('toString()method:'+date.toString());print('toJSON()method:'+date.toJSON());//printhoursandminutesincorrectlyprint('toUTCString()method:'+date.toUTCS