C#任务栏进度条无法正确使用Invoke

时间:2014-08-12 08:59:32

标签: c# invoke

正如我昨天所说,只需使用Invoke并在那里更新值即可访问任务栏进度条。这很有效,但有一个问题:

当我的应用程序的窗口被聚焦时,以下代码产生我想要的输出,这是 currentTaskbarValue 的值。但是一旦切换到例如Firefox在应用程序运行时,我得到的异常是:“任务栏例外:对象引用未设置为对象的实例。

一旦我再次聚焦应用程序,当前值就会打印到调试控制台。

private static void reportTaskbarProgress()
{
    try
    {
        Filtertest.MainForm.ActiveForm.Invoke((MethodInvoker) delegate
        {taskbar.SetProgressValue(currentTaskbarValue, maximumTaskbarValue);});

        Debug.WriteLine("" + currentTaskbarValue);

        currentTaskbarValue ++;
    }
    catch(Exception exception)
    {
        Debug.WriteLine("Taskbar Exception: " + exception.Message);
    }
}

这实际上不是问题,因为应用程序仍在运行并产生正确的结果,但对于进度报告,这是一个问题,因为任务栏永远不会达到100%,因此使用其权限驻留在我的应用程序中。 / p>

提前致谢。

编辑:上面的代码位于不同的类中,无法访问MainForm上的所有组件(只需一个按钮)!

1 个答案:

答案 0 :(得分:0)

Application.OpenForms[0].Invoke((MethodInvoker)(() => taskbar.SetProgressValue(currentTaskbarValue, maximumTaskbarValue)));