【问题标题】:Windows 7 Taskbar progressWindows 7 任务栏进度
【发布时间】:2010-12-18 00:44:49
【问题描述】:

快速提问,我为 Windows 7 开发了一个特定于论坛的 C# WPF WebBrowser。

到目前为止,我已经完成了任务栏:

标签式缩略图

跳跃者

图标叠加

现在,由于 WebBrowser 在开始下载时使用 IE 引擎,因此会显示进度对话框,我希望将进度反映在我的应用程序的任务栏按钮中。

这可以实现吗?谢谢

【问题讨论】:

  • 欢迎来到 SO!这里有一个提示:提问时使用更多标签。我帮您添加了一些。
  • 你是问怎么获取进度还是怎么放到任务栏中?

标签: c# wpf windows-7 taskbar


【解决方案1】:

我相信这是Scott Hanselman covered in one of his weekly source code blogs。

不确定这是否是您要找的。​​p>

【讨论】:

  • 虽然这个答案已经有好几年了,而且这个链接很有帮助,但如果你在这个网站上发布答案的基本部分会更好,或者你的帖子有被删除的风险See the FAQ where it mentions answers that are 'barely more than a link'.你可能如果您愿意,仍然包括链接,但仅作为“参考”。答案应该是独立的,不需要链接。
【解决方案2】:

我知道如何将它放在任务栏中,我只需要捕获下载进度,以便我可以在任务栏中显示进度。这是我如何让它显示导航的 sn-p,无需代码即可显示文件副本,shell 会自动拾取它。

  #region Background Worker

    void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        this.TaskbarItemInfo.ProgressValue = (double)e.ProgressPercentage / 100;

    }

    void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (e.Cancelled == true)
        {
            this.TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Paused;
        }
        else if (e.Error != null)
        {
            this.TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Error;
        }
        else
        {
            this.TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None;
        }
    }

    void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {
            Thread.Sleep(100);

            this.backgroundWorker1.ReportProgress(i,i.ToString());
        }
            }
        }
    }

    #endregion

导航所需的只是:

 private void Browser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        if (backgroundWorker1.IsBusy == false)
        {
            backgroundWorker1.RunWorkerAsync();

            TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal;
        }

        if (tabControl1.TabPages.Count > 10 && tabControl1.SelectedTab != null)
            UpdatePreviewBitmap(tabControl1.SelectedTab);

并取自窗口加载事件:

        this.backgroundWorker1.WorkerReportsProgress = true;
        this.backgroundWorker1.WorkerSupportsCancellation = true;
        this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
        this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);

        //
        TabbedThumbnail preview = new TabbedThumbnail(this.Handle, tabPage.Handle);
        //
        preview.TabbedThumbnailActivated += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailActivated);
        preview.TabbedThumbnailClosed += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailClosed);
        preview.TabbedThumbnailMaximized += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailMaximized);
        preview.TabbedThumbnailMinimized += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailMinimized);
        //
        TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview);
        //
        tabControl1.SelectedTab = tabPage;
        TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab);
        //

        scrollEventAdded = false;

希望这是有道理的。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2011-01-11
    • 2010-11-20
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多