wpf中实现从剪贴板得到图片并将其显示在wpf image 上添加控件控件上,求详细代码

wpf里面的image控件多线程有关问题_读书人
wpf里面的image控件多线程有关问题
&来源:读书人网&【读书人网():综合教育门户网站】
wpf里面的image控件多线程问题工程需要读取一部分图片,然后显示在image控件上,但是每次读的时候,整个窗体
wpf里面的image控件多线程问题工程需要读取一部分图片,然后显示在image控件上,但是每次读的时候,整个窗体都卡主了,我在读取过程实现了多线,但是在image.Source&=&imagepng的时候,还是卡&&&&&&&&&&&Thread&thrd&=&new&Thread(new&ThreadStart(()&=&&&&&&&&&&&&&{&&&&&&&&&&&&&&&while&(true)&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&this.Dispatcher.Invoke(new&Action(()&=&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&image=&//imagepng数据在后台读取,读取过程没有贴上来&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}));&&&&&&&&&&&&&&&&&&&}}));&&&&&&thrd.Start();&不知道有什么方法能解决此问题 [解决办法]<ponentModel.BackgroundWorker()&backgroundWorker&=&new&ponentModel.BackgroundWorker();&&&&&&&&&&&&backgroundWorker.WorkerReportsProgress&=&&&&&&&&&&&&&backgroundWorker.WorkerSupportsCancellation&=&&&&&&&&&&&&&//回调方法&&&&&&&&&&&&backgroundWorker.RunWorkerCompleted&+=&new&ponentModel.RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);&&&&&&&&&&&//线程执行方法&backgroundWorker.DoWork&+=&new&ponentModel.DoWorkEventHandler(backgroundWorker_DoWork);&&&&&&&&&&&&backgroundWorker.RunWorkerAsync();------解决方案--------------------
使用“保护线程”方式使用image的读写。[解决办法]&&&&&&//由于PictureBox1、Button_InsertSatelliteMapImage、ProgressBar1等均被涉及于线程,所以需要进行线程安全设置。&&&&&&&&delegate&void&PictureBoxRefreshDelegate();&//&线程刷新picturebox1&&&&&&&&private&void&PictureBoxRefresh()&&&&&&&&&&&//&线程刷新picturebox1&&&&&&&&{&&&&&&&&&&&&if&(PictureBox1.InvokeRequired)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&PictureBoxRefreshDelegate&d&=&new&PictureBoxRefreshDelegate(PictureBoxRefresh);&&&&&&&&&&&&&&&&this.Invoke(d);&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&PictureBox1.Refresh();&&&&&&&&&&&&}&&&&&&&&}[解决办法]Invoke这个会阻塞UI线程&其实你的多线程和单线程没有什么区别。。。。你用一个控件.Invoke和线程锁lock(控件){}是一样的参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1117次
排名:千里之外
原创:10篇
(1)(4)(1)(1)(4)(1)(1)首先在xaml文件里定义一个Image控件,取名为img
MemoryStream stream = new MemoryStream(获得的数据库对象);
BitMapImage bmp = new BitMapImage();
bmp.BeginInit();//初始化
bmp.StreamSource =//设置源
bmp.EndInit();//初始化结束
img.Source =//设置图像Source
很多人用这个方法都没有初始化BitMapImage ,这样将会导致错误,并无法正常获取图片数据。
public class emp
  public byte[] Photo{}
xaml中的代码
&private void btnChoosePhoto_Click(object sender, RoutedEventArgs e)&&&&&&& {&&&&&&&&&&& OpenFileDialog ofd = new OpenFileDialog();//打开选择文件窗口&&&&&&&&&&& ofd.Filter = "jpg|*.jpg|png|*.png";//过滤器&&&&&&&&&&& if (ofd.ShowDialog() == true)&&&&&&&&&&& {&&&&&&&&&&&&&&& string fileName = ofd.FileName;//获得文件的完整路径&&&&&&&&&&&&&&& emp.Photo&& = File.ReadAllBytes(fileName);//把图像的二进制数据存储到emp的Photo属性中&&&&&&&&&&&&&&& img.Source = new BitmapImage(new Uri(fileName));//将图片显示到Image控件上&&&&&&&&&&& }&&&&&&& }
阅读(...) 评论()}

我要回帖

更多关于 wpf image 上添加控件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信