.NET上的C#移动框架 - Windows窗体属性不会改变
我在写一个需要用户认证的c#应用程序。.NET上的C#移动框架 - Windows窗体属性不会改变
当用户点击登录按钮时,相当多的东西在后台完成,但是我很难通知用户发生了什么事情,而且程序不仅仅是冻结的。
我有一些隐藏的文本字段,我想在他们登录后显示,而这些东西正在运行,但我似乎无法让它显示出来。
基本上,当用户点击登录按钮,它会检查,看看他们的凭据是正确的,则要么被省略了一些其他功能可能会遇到,然后通过不同的形式消息应该显示出来,然后。
凭证进行检查后,我知道该用户是有效的,我试图运行这样的:
please_wait.Visible = true;
但是当它到达的代码这一点不会改变。 我试过线程它,看看是否会有所帮助。而不是调用上面的行,我只是启动一个线程来完成它。
这也行不通。该领域仍然没有出现。
如果我在启动线程或更改Visible属性后返回功能右,它工作得很好。
如何让它正常工作和更改后有更多的代码运行?
问题不在于您需要从后台线程更新UI。相反,它应该是在后台线程中执行长时间运行的任务并将更新编组到前台。这通常通过带进度通知的BackgroundWorker
完成(例如,在进度条上)。
基本上,您的UI前台线程要么被加载要么被阻塞,因此它不处理消息队列中的消息来更新用户界面。
谢谢。这似乎是最好的解决方案。 但是,BackgroundWorker在Compact Framework上不可用(我认识到在问题中我称之为“Mobile Framework” - 可能导致了一些混淆),所以我使用BackgroundWorker的这种实现:http://www.danielmoth。 COM /博客/ BackgroundWorker的,sample.aspx – jhirsch 2010-07-22 18:00:37
随着格雷格的建议(这当然是第一步,如果你还没有这样做),你可能还需要放弃一些量子。
如果您对计划程序征税,则有可能UI更新(这是相当低的优先级)可能会被抢先,直到您的工作人员完成。在后台线程中添加一个Application.DoEvents(或者可能是Thread.Sleep(1))可以为UI提供一点时间调度。
您是否尝试过向Application.DoEvents()添加调用?这是一种黑客攻击,但这只是你有时需要的。
这个调用上面的代码是什么? *好像*表示阻止。正如下面的海报所说的,你需要在后台执行* work *(检查细节),以及主线程中的UI内容。 – 2010-07-21 23:57:23