【问题标题】:Change the label content while processing [duplicate]处理时更改标签内容[重复]
【发布时间】:2017-06-11 00:52:01
【问题描述】:

我有一个函数可以生成进程。在函数的开头,我想更改指示状态的标签的文本,一旦过程结束,再次更改。

事实是只显示最后的变化。

我知道我可以为进程创建一个线程,但在这种情况下不需要,我只想知道是否有一些提示或技巧可以在不使用线程的情况下完成它。

【问题讨论】:

  • 任何代码会有帮助吗?我不确定您是否了解网络、桌面或 Windows 应用程序
  • 这个标签只需要更改两次?一个在开头,一个在结尾?只需在调用方法中更改它,就在处理函数之前
  • 有几个选项不涉及“线程”,例如 async/await、BackgroundWorker 等。但是您必须以一种或另一种方式从 UI 线程中获取处理以防止它阻塞用户界面。

标签: c#


【解决方案1】:

在这种情况下,当您在 UI 中更改某些内容时,它不会更改,直到整个过程完成,所以正如您所说,您只能看到标签的最终状态。诀窍很简单。第一次更新标签时,您需要使用辅助线程。 看下面的例子:

 class Program
    {
        private delegate void del();
        static void Main(string[] args)
        {
            del d = updateConsole;
            var res = d.BeginInvoke(null, null);
            while (!res.IsCompleted)
            {
                // do the job here
            }
            d.EndInvoke(res);
            Thread.Sleep(1000);
            Console.Clear();
            Console.WriteLine("Done!");
            Console.Read();
        }

        private static void updateConsole()
        {
            for (var i = 0; i <= 10; i++)
            {
                Thread.Sleep(500);
                Console.Clear();
                Console.WriteLine(i);
            }

        }
    }

这种简单的技术可以帮助您将标签的第一次更新与整个过程分开。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2012-11-08
    相关资源
    最近更新 更多