Одновременно может быть зарегистрирован только один обработчик события PrintTaskRequested. Ошибка печати UWP. - PullRequest
0 голосов
/ 08 мая 2020

В конструкторе Mainpage у меня есть эта строка:

PrintManager.GetForCurrentView().PrintTaskRequested += OnPrintTaskRequested; 

У меня есть кнопка в строке меню для печати с помощью этого обработчика события щелчка:

CanvasPrintDocument printDocument;

public async void PrintButtonClick()
{
    if (printDocument != null)
    {
        printDocument.Dispose();
    }

    printDocument = new CanvasPrintDocument();

    printDocument.Preview += (sender, args) =>
    {
        sender.SetPageCount(1);
        PrintPage(args.DrawingSession, args.PrintTaskOptions.GetPageDescription(1));
    };

    printDocument.Print += (sender, args) =>
    {
        using var ds = args.CreateDrawingSession();
        PrintPage(ds, args.PrintTaskOptions.GetPageDescription(1));
    };

    try
    {
        await PrintManager.ShowPrintUIAsync();
    }
    catch (Exception)
    {
    }
}
private void PrintPage(CanvasDrawingSession ds, PrintPageDescription printPageDescription)
{
    //
}

Эта кнопка также имеет ускоритель клавиатуры CTRL + P.

Теперь это работает для меня на моем компьютере, в режиме отладки и выпуска, без проблем.

Однако я получаю несколько sh отчетов мое приложение, которое сообщает об ошибке:

Метод был вызван в непредвиденное время.

Одновременно может быть зарегистрирован только один обработчик для события PrintTaskRequested.

Я не понимаю, как событие PrintTaskRequested регистрируется более одного раза за раз. Поскольку код регистрации обработчика событий находится в конструкторе.

У меня нет других журналов печати c в моем приложении.

Любая помощь приветствуется. Спасибо.

1 Ответ

1 голос
/ 08 мая 2020

если регистрация события происходит в конструкторе MainPage, вы можете проверить, может ли приложение переходить на MainPage несколько раз.

Но более распространенным подходом является отмена события перед его регистрацией.

PrintManager.GetForCurrentView().PrintTaskRequested -= OnPrintTaskRequested; 
PrintManager.GetForCurrentView().PrintTaskRequested += OnPrintTaskRequested; 

Это гарантирует, что всегда будет регистрироваться только одно событие печати. ​​

Спасибо.

...