Не удается использовать объект 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");
});
}