当前位置:  开发笔记 > 编程语言 > 正文

线程在for循环中休眠

如何解决《线程在for循环中休眠》经验,为你挑选了1个好方法。

我需要你的帮助才能使用这个方法:

for (int i =0; i

但我没有看到我的数据流如瀑布.



1> Marc Gravell..:

您正在阻止UI线程 - 在您离开事件处理程序之前,通常不会显示任何更新.一个hacky方法是使用Application.DoEvents(),但这是懒惰的,并且冒着重新入侵的风险,特别是如果你正在暂停.

更好的方法是在后台线程上完成工作,并使用Invoke将数据推送到UI(不要从工作线程与UI通信).

或者只是在单独的刻度中添加单个项目?

这是一个BackgroundWorker用于工作的示例,ReportProgress用于将项目推送到UI:

using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
static class Program
{
    static void Main()
    {
        // setup some form state
        Form form = new Form();
        ListView list = new ListView();
        list.View = View.List;
        BackgroundWorker worker = new BackgroundWorker();
        worker.WorkerReportsProgress = true;
        form.Controls.Add(list);
        list.Dock = DockStyle.Fill;
        // start the worker when the form loads
        form.Load += delegate {
            worker.RunWorkerAsync();
        };
        worker.DoWork += delegate
        {
            // this code happens on a background thread, so doesn't
            // block the UI while running - but shouldn't talk
            // directly to any controls
            for(int i = 0 ; i < 500 ; i++) {
                worker.ReportProgress(0, "Item " + i);
                Thread.Sleep(150);
            }
        };
        worker.ProgressChanged += delegate(object sender,
           ProgressChangedEventArgs args)
        {
            // this is invoked on the UI thread when we
            // call "ReportProgress" - allowing us to talk
            // to controls; we've passed the new info in
            // args.UserState
            list.Items.Add((string)args.UserState);
        };
        Application.Run(form);
    }
}

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有