- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我只是想要一个不确定的进度条,它变得可见并显示一些“事件”以指示查询正在运行,然后,当查询完成时,又回到不可见状态。看起来很简单;但使用此代码:
try
{
Cursor.Current = Cursors.WaitCursor;
progressBarChanges.Value = 50;
progressBarChanges.Step = 20;
progressBarChanges.Visible = true;
... // the meat of the code, where the query is being done, elided
} finally
{
progressBarChanges.Visible = false;
Cursor.Current = Cursors.Default;
}
...进度条从不显示,即使查询需要一段时间才能运行。进度条在 DGV 上。我意识到我的进度代码有点蹩脚,但首先要做的是 - 我只想让这该死的东西为初学者展示一些东西。
在调用运行查询的 BackgroundWorker 过程之前,我将进度条设置为可见方式:
progressBarChanges.Value = 50;
progressBarChanges.Step = 20;
progressBarChanges.Visible = true;
. . .
if (args.KeyCode == Keys.Enter)
{
if (ValidEntryForCRID(textBoxID.Text))
{
RetrieveAndBindPlatypusData();
var tb = (TextBox)Controls.Find("textBoxDuckbill", true).First();
if (tb != null)
{
tb.Focus();
}
if ((!string.IsNullOrWhiteSpace(textBoxID.Text)) &&
(backgroundWorkerShowChanges.IsBusy != true))
{
backgroundWorkerShowChanges.RunWorkerAsync();
}
. . .
...然而 progressBar 永远不会变得可见(除非在为 DGV 的数据源分配返回的查询/结果集的 OracleDateTable 值后我从未将它设置回 visible = false)。如果我将其注释掉,它就会(迟来的)最终出现,显然(错误地)认为“迟到总比不到好。”
有没有办法强制 Windows“注意”“progressBarChanges.Visible = true;”马上排队?类似于 .ProcessMessages() 或 this.Refresh 或...???
最佳答案
发生这种情况是因为您没有给 UI 线程更新时间。您正在更新为可见并立即运行您的代码。该代码应在后台线程上运行并发送更新消息。
详细说明:
当您设置 Visible 属性时,直到当前逻辑结束时,UI 线程才真正更新。所以,发生的事情是这样的:
你想要的是:
然后这个:
然后这个:
A Task或 Backgroundworker应该很容易实现这一点。
更新显示持续滚动的代码
我相信您只是想念进度条的样式应该是 ProgressBarStyle.Marquee
。如果您已经将工作卸载给后台工作人员,那么剩下的工作就可以了
public Form1()
{
InitializeComponent();
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
progressBar1.Enabled = progressBar1.Visible = false;
progressBar1.Style = ProgressBarStyle.Marquee;
}
private void button1_Click(object sender, EventArgs e)
{
progressBar1.Visible = true;
progressBar1.Enabled = true;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
System.Threading.Thread.Sleep(10000);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
progressBar1.Visible = progressBar1.Enabled = false;
}
关于c# - 进度条从不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12865342/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
notificationCenterPublisher = NotificationCenter.default .publisher(for: .NSManagedObjec
我有以下 Rust 代码: #[inline(never)] fn x() -> i32 { 21 } pub fn main() -> i32 { x() } 如果没有优化 (-C
notificationCenterPublisher = NotificationCenter.default .publisher(for: .NSManagedObjec
我有以下 Rust 代码: #[inline(never)] fn x() -> i32 { 21 } pub fn main() -> i32 { x() } 如果没有优化 (-C
假设我的 ASPX 页面没有内联 C# 代码块。 所以,我可以安全地设置 ...在我的 web.config 文件中,不用担心编译错误。 就性能而言,使用以下设置是否会有任何损失? 即“自动”检测
应用程序.js var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor: 'black', l
基本上,我正在为实现多级优先级队列的 xv6 内核实现一个调度程序。我有一个严重的问题,我不明白,我类(class)的助教不明白,我已经错过了这个项目的最后期限,所以现在帮助我不会给我任何加分 - 但
我想避免 git 自动 merge 我的 composer.json。这样我就可以在 develop 分支中有一个使用 dev-develop 包的 composer.json,而 master 中的
当比较两种不同的算法实现时(因此,不关心它们的绝对性能,而只关心相对性能)我是否最好强制 Java 只运行解释代码? 也就是说,打开 -Xint 标志会更好吗? 最佳答案 我不认为禁用 JIT 会更好
class A{ const size_t number; public: A(size_t number): number(number) {} void f(){
问题 寻找在以下之间切换的方法: 总是 从不 仅在静默模式下 仅当不处于静默模式时 这些选项在手机上的路径---菜单>>设置>>声音>>振动---找到。 通过手机导航很容易更改(顺便说一句,我的手机是
如何设置电源设置关闭:从不(关闭显示器=从不,让计算机进入休眠状态=从不),通过c#代码 最佳答案 这个问题中给出的链接可以告诉你一个方法。 Programmatically change Windo
我是一名优秀的程序员,十分优秀!