Windows 7任务栏进度

6

快速问题,我开发了一个专门用于Windows 7的基于C# WPF的论坛WebBrowser。

到目前为止,我已经完成了任务栏的以下功能:

选项卡缩略图

Jumplists

图标叠加

现在,由于WebBrowser使用IE引擎,当下载开始时,进度对话框会显示出来。我想让进度反映在我的应用程序的任务栏按钮上。

这可行吗?谢谢


欢迎来到 Stack Overflow!这里有个提示:在提问时多使用一些标签。我已经帮您添加了一些标签。 - Neil N
你是在问如何获取进度还是如何将其放入任务栏? - Philip Wallace
2个回答

4

1
虽然这个答案已经几年了,链接很有帮助,但如果您在这个网站上发布答案的基本部分,或者您的帖子可能会被删除,那就更好了请参阅FAQ中提到的“几乎只是一个链接”的答案。 如果您愿意,仍然可以包含链接,但只作为“参考”。答案应该独立存在,不需要链接。 - Taryn

1

我知道如何将它放在任务栏中,我只需要捕获下载进度,以便在任务栏中显示进度。这是一个代码片段,展示了如何显示导航,文件复制会自动显示,不需要编写代码,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;

希望这有意义。谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接