正如我昨天所说,只需使用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上的所有组件(只需一个按钮)!
答案 0 :(得分:0)
Application.OpenForms[0].Invoke((MethodInvoker)(() => taskbar.SetProgressValue(currentTaskbarValue, maximumTaskbarValue)));