Не удается использовать объект DependencyObject, принадлежащий к другому потоку, отличному от его родительского объекта Freezable

есть часть кода такая, тут идет печать на принтер. Использую wpf, прочитал что возможно но все равно валится ошибка, в чем может быть проблема? И возможно использую что-то лишнее. Подскажите как можно исправить?

    GeneratedBarcode MyBarCodeBarcodeWriter = BarcodeWriter.CreateBarcode($"{(char)0x00F1}(01){gtin}(11){dateStart}(17){expirationDate}(10)10(21){partNum} ", BarcodeWriterEncoding.Code128).SaveAsJpeg("C:/gs1code128.jpg");
            MyBarCodeBarcodeWriter.ResizeTo(300, 30);
            MyBarCodeBarcodeWriter.ToBitmap();
            System.Drawing.Image img = System.Drawing.Image.FromFile("C:/gs1code128.jpg");
            MemoryStream ms = new MemoryStream();
            img.Save(ms, ImageFormat.Png);
            byte[] buffer = ms.GetBuffer();
            MemoryStream bufferPasser = new MemoryStream(buffer);
            BitmapImage bitmap = new BitmapImage();
            bitmap.BeginInit();
            bitmap.StreamSource = bufferPasser;
            bitmap.EndInit();
            ImageBrush myImageBrush = new ImageBrush(bitmap);
            Application.Current.Dispatcher.Invoke(() =>
            {
                Canvas myCanvas = new Canvas();
                myCanvas.Background = myImageBrush;
                myCanvas.Height = 50;
                myCanvas.Width = 300;
                PrintDialog printDialog = new PrintDialog();
                printDialog.PrintVisual(myCanvas, "Распечатываем элемент Canvas");

            });

Не удается использовать объект DependencyObject, принадлежащий к другому потоку, отличному от его родительского объекта Freezable.


Ответы (1 шт):

Автор решения: aepot

Покопался в доках IronBarCode. Много ошибок допускаете, и много лишнего делаете.

string input = $"{(char)0x00F1}(01){gtin}(11){dateStart}(17){expirationDate}(10)10(21){partNum}";
GeneratedBarcode barcode = BarcodeWriter.CreateBarcode(input, BarcodeWriterEncoding.Code128).ResizeTo(300, 30);
using (MemoryStream ms = new MemoryStream())
{
    using (Stream stream = barcode.ToWindowsBitmapStream())
    {
        stream.CopyTo(ms);
    }
    ms.Position = 0;
    Dispatcher.Invoke(() =>
    {
        Image img = new Image();
        img.Source = BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
        PrintDialog printDialog = new PrintDialog();
        printDialog.PrintVisual(img, "Распечатываем элемент Image");
    });
}
→ Ссылка