public void Initialize() { ThreadPool.QueueUserWorkItem(state => { while (true) { QRCodeDecoder decoder = new QRCodeDecoder(); Frame frame = _frameSource.Pick(); if (frame == null) { continue; } byte[] decodeBytes = null; try { decodeBytes = decoder.DecodeBytes(new QRCodeBitmapImage(frame.RawData)).Select(s => (byte)s).ToArray(); } catch (Exception e) { continue; } var index = BitConverter.ToInt32(decodeBytes, 0); frame.Content = decodeBytes.Skip(sizeof(int)).ToArray(); _frames.TryAdd(index, frame); TryFinalize(); Thread.Sleep(100); } }); }