当前位置: 首页 > 编程语言 > C#

Form忙时什么都不做(冻结)分享

时间:2023-04-10 19:35:18 C#

Form忙时什么也不做(冻结)我有一个使用C#的WinForms应用程序。我尝试从文件中读取一些数据并将其插入到数据表中。当这个操作很忙时,我的表格冻结了,我无法移动它。有谁知道我该如何解决这个问题?这可能是因为您在UI线程上执行操作。将文件和数据库操作移至另一个线程以防止UI线程冻结。以下是使用ThreadPool的示例。作为替代方案,您可以手动启动线程,但如果您想中止它们,则需要手动跟踪它们。使用System.Collections.Generic;使用System.ComponentModel;使用系统数据;使用系统绘图;使用System.Linq;使用系统文本;使用System.Windows.Forms;使用系统线程;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){//使用线程池ThreadPool.QueueUserWorkItem(DoWork);}privatevoidDoWork(objectstate){//DoExpensiveWorkfor(inti=0;i这是因为你正在使用主线程执行需要很长时间的操作。最好的解决方案是使用另一个线程来读取您需要的文件,这将允许主线程正常运行更新。在此处阅读有关线程的更多信息http://msdn.microsoft.com/en-us/library/aa645740%28v=vs.71%29.aspx您的UI相关控件在UI线程上运行,通常,您不应该花费在UI线程上花费大量时间(如果这样做,您的UI线程将阻塞/冻结,直到该任务完成)。还有另一种称为WorkerThread的类型,您可以创建并使用它来执行长时间运行的任务,这将使您的UI保持响应/不冻结。HereareinstructionsonhowtouseThreadinginWindowsFormsusingThreadinginWindowsForms。或者,Winforms中有一个Backgroundworker组件,您可以使用它在非UI线程上执行任务,这在此处进行了说明。利用任务。也就是说,以上是C#学习教程:当操作繁忙时,窗体不执行任何操作(冻结)所有共享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注---Task.Factory.StartNew(()=>DoAction()).ContinueWith(()=>DoAfterActionIsComplete());本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: