Скопировать общий поток без изменения положения - PullRequest
0 голосов
/ 27 октября 2018

У меня есть Stream, к которому постоянно получают доступ из другого потока.Но я хочу получить к нему краткий доступ для выполнения некоторых тяжелых графических работ в gpu в UserControl.

. В настоящее время я использую метод Stream.CopyTo, чтобы скопировать его в MemoryStream для продолжения.Но даже метод Stream.CopyTo занимает слишком много времени, и работа из другого потока на короткое время прерывается.

Вот мой код:

protected override void OnPaint(PaintEventArgs e) {
   if(myGenericStream != null) {
      using(MemoryStream ms = new MemoryStream()) {
         int pos = myGenericStream.Position;

         myGenericStream.CopyTo(ms);

         myGenericStream.Seek(pos, SeekOrigin.Begin); //I have also tried myGenericStream.Position = pos

         ms.Seek(0, SeekOrigin.Begin);
         // Paint work using the new MemoryStream...

      }
   }
}
...