private void RenderFrame(object sender, DoWorkEventArgs e) { ProcessCustomFrameEventArgs args = (ProcessCustomFrameEventArgs)e.Argument; CustomFrame nFrame = new CustomFrame(); WriteableBitmap src = null; if (args.img != null) { //if we have an IImage, convert it src = new WriteableBitmap(Utils.IImageToBitmapSource(args.img)); args.img.Dispose(); } else if (args.writeablebmp != null) { //otherwise we can just use the writeablebitmap src = args.writeablebmp; } //set CustomFrame bitmap if (src != null) { src.Freeze(); nFrame.SetBitmap(src); } else { //easier to avoid setting nFrame = null; } e.Result = nFrame; }
public void SetFrame(IImage nImage) { if (!isWorking) { isWorking = true; BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += RenderFrame; bw.RunWorkerCompleted += Render_Complete; ProcessCustomFrameEventArgs args = new ProcessCustomFrameEventArgs(); args.img = nImage; args.writeablebmp = null; bw.RunWorkerAsync(args); } }