您当前的位置: 首页 >  ui

君子居易

暂无认证

  • 0浏览

    0关注

    210博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

c# - 如何在非UI线程中编辑WriteableBitmap.BackBuffer?

君子居易 发布时间:2020-05-21 23:42:43 ,浏览量:0

MSDN suggests在后台线程中写入backbuffer。只需要在ui线程上执行某些更新前和更新后操作。因此,当后台线程执行实际更新时,ui线程可以自由地执行其他操作: 

 //Put this code in a method that is called from the background thread
        long pBackBuffer = 0, backBufferStride = 0;
        Application.Current.Dispatcher.Invoke(() =>
        {//lock bitmap in ui thread
            _bitmap.Lock();
            pBackBuffer = (long)_bitmap.BackBuffer;//Make pointer available to background thread
            backBufferStride = Bitmap.BackBufferStride;
        });
        //Back to the worker thread
        unsafe
        {
            //Carry out updates to the backbuffer here
            foreach (var update in updates)
            {
                long bufferWithOffset = pBackBuffer + GetBufferOffset(update.X, update.Y, backBufferStride);
                *((int*)bufferWithOffset) = update.Color;
            }
        }
        Application.Current.Dispatcher.Invoke(() =>
        {//UI thread does post update operations
            _bitmap.AddDirtyRect(new System.Windows.Int32Rect(0, 0, width, height));
            _bitmap.Unlock();
        });

 

关注
打赏
1660814979
查看更多评论
立即登录/注册

微信扫码登录

0.0413s