2014-02-20 42 views
0

我有一个应用程序读取主窗体上的数据以及弹出窗口。在我的应用程序主窗体上,我正在阅读ASCII中的实时串行通信。在我的弹出窗口中,我的程序正在分析这些数据并捕获通过/失败情况。Windows窗体在程序执行过程中卡住

当我执行我的程序时,它按预期工作。但是,在程序运行时(需要大约2分钟才能完成),我无法在屏幕上移动弹出窗口或最小化主应用程序窗口。就好像它们在操作完成之前一直卡住。我没有收到“没有反应”的信息,并试图找出如何在操作过程中移动/最小化/关闭窗口。

是多线程的答案?任何帮助表示赞赏。

+1

您正在阻止用户界面。你应该在一个单独的线程上完成这种工作。使用'BackgroundWorker'。 – etaiso

+0

是的,主线程被锁定,所以你想要去使用后台线程 –

+0

粗略猜测是你通过调用你的DataReceived事件处理程序的BeginInvoke()方法来触发UI线程。 –

回答

1

您可能正在执行一些非常长的opração'主线程'。尝试创建一个新的'线程'来运行这个非常大的操作,并且表单不会被锁定。

+0

在高层次上,我的程序正在读取串行数据(主窗口),显示串行数据(主窗口)和分析数据(弹出窗口)。一切都是连续的,因为我需要接收一行数据并立即进行分析。多线程并行地运行它们吗?如果是这样,我不确定这会工作,因为我需要连续的顺序。 – Nevets

+0

您可以尝试创建经理,创建列表并添加itens以进行分析,并且您的线程可以按顺序进行分析。 –

+0

感谢卢卡斯,我会试试 – Nevets

0

您将需要使用多线程,或者可能需要一些异步/等待操作。

http://msdn.microsoft.com/en-us/library/ms173178.aspx

http://msdn.microsoft.com/en-us/library/vstudio/hh191443(v=vs.110).aspx

希望这有助于!

+0

在高我的程序正在读取串行数据(主窗口),显示串行数据(主窗口)和分析数据(弹出窗口)。一切都是连续的,因为我需要接收一行数据并立即进行分析。多线程并行地运行它们吗?如果是这样,我不确定这会工作,因为我需要连续顺序 – Nevets

+1

是的,但是也许在显示后分析数据需要太长的时间,那么也许分析部分你应该用后台工作者或类似的东西来完成。这样你就可以在屏幕上看到数据,但不需要等到数据分析完毕,例如关闭窗口。 ;) –

+0

谢谢奥斯卡,我会试试 – Nevets

相关问题