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

Gui在使用线程时卡住分享

时间:2023-04-10 20:19:04 C#

Gui在使用线程时卡住我卡住了,希望有人能帮助我。我制作了一个带有加载栏的类/GUI,该加载栏设置为选取框,以便在执行任务时可以将其显示给用户。在我的一个gui类中,在第一行的构造函数中,我正在创建此类的一个新实例,然后执行LoadingBarbar=newLoadingBar();线程thread=newThread(bar.Show);线程.开始();然而,即使主程序线程正在做一些更密集的事情,gui似乎仍然冻结,即使我使用后台工作者。我提到的方法有什么问题,如果是,我需要更改什么?谢谢你需要改变你的方法。虽然工作是在“工作线程”(通常是BackGroundWorker)中完成的,但GUI需要保留在主线程中。worker然后向GUI报告,然后更新。你最好反其道而行之。在线程(或后台工作者)中进行密集工作,并在主应用程序线程中显示等待屏幕。您需要使用BackgroundWorker。将一个拖到窗体上,单击backgroundWorker1并将WorkerReportsProgress属性设置为True,然后转到事件(通过属性窗口)并附加一个处理程序DoWork事件,如下所示privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){varuserState=new状态类();while(working){//TODO:doworkhere//通过userState更新此任务周围的状态userState.property="somestatus";//报告进度以便backgroundWorker1_ProgressChanged被调用this.backgroundWorker1。ReportProgress(完成百分比,用户状态);ProgressChanged事件看起来像这样privatevoidbackgroundWorker1_ProgressChanged(objectsender,ProgressChangedEventArgse){//e.UserState包含您传递给ReportProgress的状态数据,//您必须将其转换为正确的类型,因为它的类型objectvaruserState=(StateClass)e.UserState;intprogress=e.ProgressPercentage;//TODO:使用上述变量向UI报告进度}现在您要做的就是告诉后台工作人员通过调用this.backgroundWorker1.RunWorkerAsync()来完成工作。我认为您不会在后台工作人员中完成所有工作,或者GUI不会冻结。我们需要查看更多代码,或者您需要再次查看后台工作程序示例,看看可能出现什么问题。编辑以添加对System.Threading.Thread.Sleep(1)的调用;系统.Threading.Thread.Sleep(1);调用后汇报进度以上是C#学习教程:Gui在使用线程时冻结分享的全部内容,如果对大家有用,需要了解更多C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: