none
WPF 中多线程 资源共享的问题? 急,跪地救解 RRS feed

  • 问题

  • 问题如下: 希望那位大哥,给我力量。。。。

      //如下是主线程程序
      this.m_imageCount = capacity; //共选择几张图 这里是使用OpenFileDialog得到选择的图数量
      this.fileNames = new string[this.m_imageCount + 1];
      this.imageSize = new Point[this.m_imageCount + 1];
      this.bmpArr = new BitmapImage[this.m_imageCount + 1];
      this.bmpPanelArr = new ImgBox[this.m_imageCount + 1];
      //开启线程
      Thread lm = new Thread(LoadImg);
      lm.Start();

      

     //如下是子线程 方法 
     public void LoadImg(object panoCanvas)
     {
     double height = pano.ActualHeight - 21;
     double width = 0;
     double imageLeft = 0;
     #region 添加图到面板
     for (int num = 0; num <= this.m_imageCount; num++)
     {
      this.Dispatcher.BeginInvoke(new Action(() => //设定进度条
      {
      this.progress.Value = (100 * (num + 1)) / this.m_imageCount;
      }),DispatcherPriority.Send);
      //开始读取图片this.fileNames[num]为用户选择图地址的数组
      using (BinaryReader binReader = new BinaryReader(File.Open(this.fileNames[num], FileMode.Open)))
      {
      FileInfo fileInfo = new FileInfo(this.fileNames[num]);
      byte[] bytes = binReader.ReadBytes((int)fileInfo.Length);
      binReader.Close();
      BitmapImage original = new BitmapImage();
      original.BeginInit();
      original.StreamSource = new MemoryStream(bytes);
      original.EndInit();
      this.bmpArr[num] = original;
     }
      //--下面的ImgBox是一个类似于image控件的控件
      this.bmpPanelArr[num] = new ImgBox(num6.ToString(), this.bmpArr[num], width, height, this.controlpointnumber, true, false, true);
      this.bmpPanelArr[num].imageindex = 0;
      Canvas.SetTop(this.bmpPanelArr[num], 5);
      Canvas.SetLeft(this.bmpPanelArr[num], imageLeft);
      imageLeft += 5 + width;
      this.bmpPanelArr[num].Width = width;
     //这里是将IMG加入Canvas中
     this.Dispatcher.BeginInvoke(new Action<panoCanvas as Canvas, this.bmpPanelArr[num]>((Canvas panoCanvas,ImgBox imgBox) =>
     {
      this.pano.Children.Add(imgBox); //这里要将这个image加入一个Canvas 中
     }), DispatcherPriority.Render, this.bmpPanelArr[num]);
     }
     //--加宽画板
     if (this.m_imageLeak > pano.ActualWidth)
     {
       this.Dispatcher.BeginInvoke(new Action(() =>
       {
         this.pano.Width = imageLeft;
       }),DispatcherPriority.Render);
     }
     #endregion
     }

    问题很简单,就是 用户 选择几张 然后我有序的将这里图 加入一个 Canvas中,但是 由于 图可能 比较大,所以需要 所用多线程 一张一张的加,并一个进度显示  代码注释很清楚的,代码本身是 存在问题,我这种写法肯定不对,因为实现不了效果,希望高手解答,小弟在此谢过。。。

     

    2010年12月22日 3:04

答案

全部回复