c#多线程读写图片画图-C# 多线程读写删除文件并绘制在picture上

问题描述

C# 多线程读写删除文件并绘制在picture上

namespace PictureSD
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool flag;
bool flag2;
private Object thisLock = new object();
ComputePic face;
Thread ThreadSamp;// 图片

    Bitmap bc1;
    Bitmap bc2;
    Graphics gc1;
    private string dir = @"C:UsersTeefanDesktopC#聊天NEWFACElogCameraCamerabinDebugImages7.jpg";
    private string dir2 = @"C:UsersTeefanDesktopC#聊天NEWFACElogCameraCamerabinDebugImages";
    private void button1_Click(object sender, EventArgs e)
    {
          System.Drawing.Image img= System.Drawing.Image.FromFile(dir);// 读7号图片测试
          Bitmap imgBit = new Bitmap(img);
          SaveBit(imgBit, dir2, 2, "jpg");//存2号
          imgBit.Dispose();

          if (face == null)
          {
              ThreadSamp = new Thread(createSamp); // 计算人脸
              ThreadSamp.IsBackground = true;
              ThreadSamp.Start();
          }
                   ThreadSamp.Join();
                    bc1.Dispose();
                    gc1.Dispose();
                     string img2 = dir2 + "/" + 2.ToString() + ".jpg";
                     File.Delete(img2);
    }

    class ComputePic
    {
        public int weight;
        public int height;
        public ComputePic(int a,int b)
        {
            weight = a;
            height = b;
        }

    }
    private void createSamp()
    {
            flag2 = false;
            face = new ComputePic(pictureBox1.Width, pictureBox1.Height);
            //假定在计算
            bc1 = new Bitmap(dir2 + "/" + "2.jpg");
             gc1 = Graphics.FromImage(bc1);
            RectangleF rect1 = new RectangleF(10, 20, face.weight++, face.height++);
            gc1.DrawImage(bc1, 0, 0, rect1, GraphicsUnit.Pixel);
        pictureBox1.Invoke((MethodInvoker)delegate //操作其他控件的语句
           {
                pictureBox1.Image = bc1;
                pictureBox1.Refresh();
          });

        face = null;
    }
    private bool SaveBit(Bitmap bitmap, string path, int num, string kind)
    {
        string img = path + "/" + num.ToString() + "." + kind;
        bitmap.Save(img);
        return flag = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
      //  button1_Click(button1, null);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        System.Timers.Timer t = new System.Timers.Timer(2000);   //实例化Timer类,设置间隔时间为10000毫秒;
        t.Elapsed += new System.Timers.ElapsedEventHandler(button1_Click); //到达时间的时候执行事件;
        t.AutoReset = true;   //设置是执行一次(false)还是一直执行(true);
        t.Enabled = true;
    }
}

}
是这样的,我做了一个界面想实现一个功能,相当于读7号图片,存时命名为2号,然后利用多线程计算2号图片,得到坐标,在绘制picture上,最后删除2号图片,再读7号,在2号计算、坐标、绘制。基本就是这个顺序不要乱,可是我琢磨几天了,要么gdi错误,要么bc1对象被别处引用,我不知道我这样的顺序应该怎么实现!或许很简单,可是我琢磨好久了,真心求教多线程而且能做到不会冲突的高手,我的代码只能基本实现图片删除,不能体现在picture画的样子刷新上!

时间: 2024-10-03 08:05:31

c#多线程读写图片画图-C# 多线程读写删除文件并绘制在picture上的相关文章

mfc多线程-MFC循环创建多线程同时处调用同一函数读写文本和excel操作

问题描述 MFC循环创建多线程同时处调用同一函数读写文本和excel操作 CString fname[3000]; CString name[1024] ; int j1 ; int nIndex = 0; void CDisposeXJXDlg::OnBtnSelSrcFile() { // TODO: Add your control notification handler code here CFileDialog dlg(TRUE, NULL, NULL ,OFN_HIDEREADON

关于安卓多线程后台图片下载的集合类的采用

问题描述 关于安卓多线程后台图片下载的集合类的采用 我的想法是使用一个ArrayList来分派下载任务,对ArrayList加上synchronized是不是就可以了? 解决方案 是的,不过synchronized不要锁定静态对象,否则可能造成死锁. 解决方案二: 通过synchronized进行线程同步,但是你开启多线程确又枷锁,多线程没用了啊 解决方案三: 大概逻辑: public synchronized void download(String url ){ //开始下载 //结束下载

安卓图片加载多线程用 AsyncTaskLoader

问题描述 安卓图片加载多线程用 AsyncTaskLoader 百度查到 AsyncTaskLoader 相比较 AsyncTask,可以后台执行,请问关闭应用还可以通知到么? 解决方案 关闭了肯定执行不了了,更多信息参考:http://www.cnblogs.com/TerryBlog/archive/2012/02/20/2359051.htmlhttp://blog.csdn.net/a910626/article/details/45599133 解决方案二: 如果Service不关闭的

PHP多线程的实例(PHP多线程类)

通过WEB服务器来实现PHP多线程功能. 当然,对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程. 但不管怎么样,它还是能满足我们的一些需要的,在需要类似多线程的功能方面还是可以采用这个类.  代码如下 复制代码       /**     * @title: PHP多线程类(Thread)     * @version: 1.0     * @author: phper.org.cn < web@phper.org.cn >    

线程池-多线程同步数据且等多线程同时完成后再走主线程

问题描述 多线程同步数据且等多线程同时完成后再走主线程 用线程池管理,开10条线程去读取和更新几十万数据,但是主线程直接跑下去了,这个不能允许,但是线程池又不能用join来.自己建Thread join,这10条线程又是一条条运行,不合要求.应该如何做,谢谢 解决方案 子进程睡眠不同的时间,父进程wait但是忽略子进程死信号,这样父进程会是最后退出的

link中用select调用一个函数,是不是多线程调用的?听说多线程可以节省时间?

问题描述 link中用select调用一个函数,是不是多线程调用的?听说多线程可以节省时间? link中用select调用一个函数,是不是多线程调用的?听说多线程可以节省时间? 解决方案 linq是串行的,要并行用plinq 参考:https://msdn.microsoft.com/zh-cn/library/dd997425.aspx

线程-在java类timetask中不能删除文件,只能读写,请各位大侠看看

问题描述 在java类timetask中不能删除文件,只能读写,请各位大侠看看 package common; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import send.service.TimeTask; public class P6Main { public static void main(String[] args) { ExecutorService p

5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结

5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 -- 第一天 认识Parallel 5天玩转C#并行和多线程编程 -- 第二天 并行集合和PLinq 5天玩转C#并行和多线程编程 -- 第三天 认识和使用Task 5天玩转C#并行和多线程编程 -- 第四天 Task进阶 5天玩转C#并行和多线程编程 -- 第五天 多线程编程大总结    一.多线程带来的问题 1.死锁问题  前面我们学习了Task的使用方法,其中Task的等待机制让我们瞬间爱上了它,但是如果我们在调用Ta

修改几个文件后,Dedecms 5.3版(GB)的在删除文件同时可删除图片等附件

经过多日测试,修改几个文件后,5.3版(GB)的在删除文件同时可删除图片等附件.具体测试了专题.文章类.图集类.这几个类别的 另外几个类别只测试了一次分类信息但没有成功. (期待高人能解决分类信息在删除文章的同时可将自带的图片等附件全删除.先谢谢了.)注明:我的站没上线,仅是本机测试. 其他类别的都没做测试.需要修改的文件为: include文件夹中的inc中的inc_fun_funAdmin.php     inc_fun_funString.php   inc_stat.php 将下面代码替