Mer C# och WPF frågor
Re: Mer C# och WPF frågor
Ny fråga:
Har ett fönster, i koden sparkas ett nytt fönster igång, icke modalt.
När det händer sätts vissa knappar på det ursprungliga fönstret till "Disabled"
Vad jag vill uppnå är att när användaren stänger det andra fönstret så skall dessa knappar sättas till "enabled"
Har ett fönster, i koden sparkas ett nytt fönster igång, icke modalt.
När det händer sätts vissa knappar på det ursprungliga fönstret till "Disabled"
Vad jag vill uppnå är att när användaren stänger det andra fönstret så skall dessa knappar sättas till "enabled"
Re: Mer C# och WPF frågor
Samma igen, gör en callback som du triggar i "on close" på det nya fönstret.
Re: Mer C# och WPF frågor
Nästa fråga, jag kör en snutt kod, rätt många gånger, och varje gång den körs, så käkas runt 100MB av minne upp.
Har försökt att sätta in GC.collect och ".dispose", men det verkar inte göra någon som helst nytta.
Här är den anropande koden:
Och en hjälpfunktion:
Har försökt att sätta in GC.collect och ".dispose", men det verkar inte göra någon som helst nytta.
Kod: Markera allt
public static void writePDFimageFromStream(MemoryStream chartStream, int plotNum)
{
XGraphics gfx;
double x = 0, y = 0;
var img = new System.Windows.Media.Imaging.BitmapImage();
img.BeginInit();
img.StreamSource = chartStream;
img.EndInit();
PdfDocument document = PdfReader.Open(finalfilename, PdfDocumentOpenMode.Modify);
if (document.AcroForm.Elements.ContainsKey("/NeedAppearances") == false)
{
document.AcroForm.Elements.Add("/NeedAppearances", new PdfBoolean(true));
}
else
{
document.AcroForm.Elements["/NeedAppearances"] = new PdfBoolean(true);
}
int numPages = document.PageCount;
XImage image = XImage.FromBitmapSource(img);
double width = image.PixelWidth;
double hrez = image.HorizontalResolution;
double height = image.PixelWidth;
double vrez = image.VerticalResolution;
switch (plotNum)
{
case 0:
gfx = XGraphics.FromPdfPage(document.Pages[2]);
x = 60;
y = 200;
gfx.DrawImage(image, x, y,250d,250d);
gfx = null;
//gfx.Dispose();
break;
case 1:
gfx = XGraphics.FromPdfPage(document.Pages[2]);
x = 325;
y = 200;
gfx.DrawImage(image, x, y, 250d, 250d);
gfx.Dispose();
break;
case 2:
gfx = XGraphics.FromPdfPage(document.Pages[2]);
x = 60;
y = 500;
gfx.DrawImage(image, x, y, 250d, 250d);
gfx.Dispose();
break;
case 3:
gfx = XGraphics.FromPdfPage(document.Pages[2]);
x = 325;
y = 500;
gfx.DrawImage(image, x, y, 250d, 250d);
gfx.Dispose();
break;
case 4:
gfx = XGraphics.FromPdfPage(document.Pages[3]);
x = 60;
y = 200;
gfx.DrawImage(image, x, y, 250d, 250d);
// gfx = null;
gfx.Dispose();
break;
case 5:
gfx = XGraphics.FromPdfPage(document.Pages[3]);
x = 325;
y = 200;
gfx.DrawImage(image, x, y, 250d, 250d);
gfx = null;
// gfx.Dispose(); gfx = null;
gfx.Dispose();
break;
case 6:
gfx = XGraphics.FromPdfPage(document.Pages[3]);
x = 60;
y = 500;
gfx.DrawImage(image, x, y, 250d, 250d);
gfx.Dispose();
break;
case 7:
gfx = XGraphics.FromPdfPage(document.Pages[3]);
x = 325;
y = 500;
gfx.DrawImage(image, x, y, 250d, 250d);
gfx.Dispose();
break;
default:
break;
}
document.Save(finalfilename);
chartStream = null;
image.Dispose();
document.Close();
document.Dispose();
GC.Collect();
}
Kod: Markera allt
BitmapSource render = plotRender(pltEvapDuty1, pltEvapDuty1.ActualWidth, pltEvapDuty1.ActualWidth);
using (MemoryStream EvapDuty1Stream = new MemoryStream())
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(render));
encoder.Save(EvapDuty1Stream);
CalcPdfOutput.writePDFimageFromStream(EvapDuty1Stream, 0);
}
Kod: Markera allt
private BitmapSource plotRender(Visual target, double dpiX, double dpiY)
{
if (target == null)
{
return null;
}
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
RenderTargetBitmap rtb = new RenderTargetBitmap((int)(bounds.Width * dpiX / 96.0),
(int)(bounds.Height * dpiY / 96.0),
dpiX,
dpiY,
PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext ctx = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(target);
ctx.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
}
rtb.Render(dv);
return rtb;
}
Re: Mer C# och WPF frågor
Jag skulle testat ett verktyg som tex dotMemory för att se vad som händer.
https://www.jetbrains.com/dotmemory/
Jag har inte använt just dotMemory själv, men flera av deras andra produkter.
https://www.jetbrains.com/dotmemory/
Jag har inte använt just dotMemory själv, men flera av deras andra produkter.
Re: Mer C# och WPF frågor
Nya frågor.
Jag skapar en minnesström med
I CalcPdfOutput.writePDFimageFromStream
läser jag strömmen med:
Dock får jag
Jag skapar en minnesström med
Kod: Markera allt
using (MemoryStream COP2Stream = new MemoryStream())
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(render));
encoder.Save(COP2Stream);
CalcPdfOutput.writePDFimageFromStream(COP2Stream, 7);
}
läser jag strömmen med:
Kod: Markera allt
BitmapImage img = new BitmapImage();
img.BeginInit();
img.StreamSource = chartStream;
img.EndInit();
Så nått fel gör jag uppenbarligen, frågan är vad.An unhandled exception of type 'System.IO.FileFormatException' occurred in PresentationCore.dll
Re: Mer C# och WPF frågor
Resetta COP2Stream innan writePDFimageFromStream, annars finns inget att läsa från den.
COP2Stream.Position = 0;
COP2Stream.Position = 0;
Re: Mer C# och WPF frågor
Har inte behövts för png.
Om jag använder png i stället för jpeg så funkar det felfritt.
Om jag använder png i stället för jpeg så funkar det felfritt.
Re: Mer C# och WPF frågor
Löste sig, visade sig att det inte gick att använda jpg, så det blev tillbaka till nummer ett istället.
Någon som vet hur man programatiskt sätter axelskalan/maxvärdet på y-axeln i WPF chartingtoolkit.
Har letat som en liten blå, men hittar bara en massa förslag på hur man gör det i xml.
Någon som vet hur man programatiskt sätter axelskalan/maxvärdet på y-axeln i WPF chartingtoolkit.
Har letat som en liten blå, men hittar bara en massa förslag på hur man gör det i xml.
Re: Mer C# och WPF frågor
Funkar det om man sätter ett x:Name på axeln och anväder det?
http://stackoverflow.com/questions/1637 ... amatically
http://stackoverflow.com/questions/1637 ... amatically