如何在 uwp 打印中断开打印事件处理程序?



我需要在多页 UWP 应用中打印单个 xaml 页面。我只能打印此页面,但是当离开该页面并尝试导航回该页面时,会抛出以下异常:

对于 PrintTaskRequest-event 一次只能注册(翻译(一个处理程序。

MS 指令指出,当您离开打印页面时,您必须断开打印事件处理程序的连接。奇怪的是,我在 Stackoverflow 上找到了 2 个简短且易于理解的 uwp 打印示例,这些示例被标记为答案,但缺乏断开连接的方法,因此在添加第二页时两者都像我的一样中断。

作为初学者,MS打印样本对我来说太复杂了。我尝试使用示例代码中的片段构建代码,但我迷失在错误中。

这是我到目前为止的测试代码。我删除了所有不需要的部分 - 只是为了预览和打印页面:

using Microsoft.Toolkit.Uwp.Helpers;
namespace Print_190905
{
public sealed partial class MainPage : Page
{
private PrintManager printMan;
private PrintDocument printDoc;
private IPrintDocumentSource printDocSource;
private PrintHelper printHelper;
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
printMan = PrintManager.GetForCurrentView();
printMan.PrintTaskRequested += PrintTaskRequested;
printDoc = new PrintDocument();
printDocSource = printDoc.DocumentSource;
printDoc.GetPreviewPage += GetPreviewPage;
}

private async void PrintButton_Click(object sender, RoutedEventArgs e)
{
await PrintManager.ShowPrintUIAsync();
}
private void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args)
{
var printTask = args.Request.CreatePrintTask("Print", PrintTaskSourceRequrested);
}
private void PrintTaskSourceRequrested(PrintTaskSourceRequestedArgs args)
{
args.SetSource(printDocSource);
}
private void GetPreviewPage(object sender, GetPreviewPageEventArgs e)
{
printDoc.SetPreviewPage(e.PageNumber, this.Print_Area);
}
private void CmdZurueck_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(Seite_2));
}
}

为了避免返回打印页面时出现错误,我从打印示例中添加了以下内容:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
if (printHelper != null)
{
printHelper.Dispose();
}
}

但是:printHelper 始终为 Null,因此永远不会调用 "Dispose" 方法。代码中没有分配值的位置,我找不到打印示例中分配 printHelper 值的位置。

当我在 PrintSample 中设置断点时,值为"(PrintSample.PrintHelper("。

那是什么意思?我可以以某种方式为 printHelper 分配一个有效的值吗?我花了很多小时才走到这一步。 因此,如果有人能提供帮助,我将不胜感激!谢谢!

printMan.PrintTaskRequested -= PrintTaskRequested;

printDoc.GetPreviewPage -= GetPreviewPage;

在 OnNavigatedFrom 中。

上述功能会在您每次进入页面时重新注册。 但是,离开页面时不会取消注册。 因此,您进入页面的次数越多,您注册的功能就越多。

最新更新