2012-07-17 107 views
0

我想在Windows Mobile中的任何进程上显示进度条/等待消息。我试着显示简单的文本“Please wait ...”,并写了Application.DoEvents(),但没有显示它,也没有显示进度条。显示进度条或等待消息

有什么办法或其他的事情我需要遵循在Windows移动设备中显示进度条?

+0

如果你能提供比这更多的信息会是有帮助的...让我们看看你的代码,我们会弄清楚你做得不好。 – BonanzaDriver 2012-07-17 14:09:03

回答

1

使用计时器并在项目中放置一个静态字符串。

如果您不想显示文本,请将字符串值设置为空。

当计时器每200毫秒左右触发一次时,更新您的消息。

private static string message = null; 

private void timer_Tick(object sender, EventArgs e) { 
    if (String.IsNullOrEmpty(message)) { 
    // clear your form values 
    } else { 
    // set your form values 
    } 
} 

当然,如果你想要一个进度条,你也可以这样做。只需为您的进度条创建静态int值并在计时器在上面的代码片段中滴答时更新您的控件。

这也可以用线程和事件处理程序完成,但Timer (click to see code examples)是最简单的方法。

UPDATE:

如果你这样做是为内嵌代码(如我从您的意见理解),请尝试以下操作:

private void Demo(int max) { 
    label1.Text = String.Empty; 
    progressBar1.Value = 0; 
    progressBar1.Maximum = max; 
    progressBar1.Refresh(); 
    do { 
    progressBar1.Value++; 
    progressBar1.Refresh(); 
    label1.Text = String.Format("{0}", progressBar1.Value); 
    label1.Refresh(); 
    } while (progressBar1.Value < progressBar1.Maximum); 
} 

看看上面的代码做你所需要的。

注意:哦,并摆脱Application.DoEvents()。这是一个邪恶的VB创建,鼓励开发人员不知道发生了什么。

+0

感谢您的回复。我想在按钮点击事件上显示进度条。首先,我尝试在进程启动时尝试显示动画进度gif,并在进程完成时隐藏它。但是当按钮事件Process正在进行时,它不会改变我的用户界面。 Bar.User接口仅在按钮事件完成后才更改。我想在按钮事件过程正在进行时显示进度条。 – 2012-07-18 14:20:59

+0

从上面的评论中,我猜你正在一个线程中完成所有这些。您需要在单独的线程中执行代码并调用进度条的更新或使用计时器更新进度栏。 – jp2code 2012-07-18 15:53:44

+0

是的,它在单线程上。有什么我可以做异步调用或相关的东西?因为我的进程线程已启动,并且显示进度条的其他线程未进入导致问题的画面。 – 2012-07-19 06:47:27

0

您正在运行的进程阻塞UI线程?

尝试在线程池上运行繁重的进程。

0

试试这个

void StartLoadingPanel() 
    { 
     this.BeginInvoke((Action)delegate() 
     { 
      Cursor.Current = Cursors.WaitCursor; 
      loadingPanelContainer.Visible = true; 


     }); 
    } 

其中loadingPanelContainer包含文本显示。