实例1

public void CycleShow()//循环绘图
        {

Task.Factory.StartNew(() =>
            {
         //  threadB = new Thread(
         //() => {

AllDealWithSpectrumDicSingle.Clear();

Form form = new MyForm();
            form.ShowInTaskbar = true;
             form.FormBorderStyle = FormBorderStyle.Sizable;
             form.StartPosition = FormStartPosition.Manual;
             form.Location = new Point(MP_MappingChildFormPosition.SingleSpectrumPosition_X, MP_MappingChildFormPosition.SingleSpectrumPosition_Y);
             Pb_Single = new PictureBox();
             form.BringToFront();
             form.Width = MP_MappingChildFormPosition.SingleSpectrumPosition_Width;
             form.Height = MP_MappingChildFormPosition.SingleSpectrumPosition_Height;
             // form.ControlBox = false;
             form.Controls.Add(Pb_Single);
             Pb_Single.Dock = DockStyle.Fill;
             Pb_Single.Visible = true;

form.Visible = true;
             //form.Show();
             while (!MP_LogicManager.StopExit)
             {

var va = new KeyValuePair<Point, SpectrumBaseInManager>();
                 lock (memotryLockSingle)
                 {
                     if (AllDealWithSpectrumDicSingle.Count <= 0) continue;
                     va = AllDealWithSpectrumDicSingle.First();
                 }
                 Application.DoEvents();
                 DrawSingleSpec(va);//画单张谱图
                 //Thread.Sleep(1);
                 form.TopMost = true;
                 form.BringToFront();
             }
             form.Close();

//}
         //);
         //   threadB.IsBackground = true;
         //   threadB.Start();

});

//  threadA = new Thread(
           //() => {

Task.Factory.StartNew(() =>
             {
             AllDealWithSpectrumDicMulti.Clear();

Form form2 = new MyForm();
                form2.ShowInTaskbar = true;
                form2.FormBorderStyle = FormBorderStyle.Sizable;
                form2.Location = new System.Drawing.Point(MP_MappingChildFormPosition.MultiSpectrumPosition_X, MP_MappingChildFormPosition.MultiSpectrumPosition_Y);
                Pb_Multi = new PictureBox();
                form2.BringToFront();
                form2.Width = MP_MappingChildFormPosition.MultiSpectrumPosition_Width;
                form2.Height = MP_MappingChildFormPosition.MultiSpectrumPosition_Height;
              //  form2.ControlBox = false;
                form2.Controls.Add(Pb_Multi);
                Pb_Multi.Dock = DockStyle.Fill;
                Pb_Multi.Visible = true;
                form2.StartPosition = FormStartPosition.Manual;
             
                form2.Visible = true;
                form2.Show();
                int count = 0;
                AllDealWithSpectrumDicMulti.Clear();
                while (!MP_LogicManager.StopExit)
                {
                 
                    var va = new KeyValuePair<Point, SpectrumBaseInManager>();
                    Dictionary<Point, SpectrumBaseInManager> AllDealWithSpectrumDic_Draw=new Dictionary<Point, SpectrumBaseInManager>();
                    lock (memotryLockMulti)
                    {
                        if (AllDealWithSpectrumDicMulti.Count <= 0) continue;
                        va = AllDealWithSpectrumDicMulti.Last();
                       if(AllDealWithSpectrumDicMulti.Count>2)
                        {
                           for(int i=0;i<2;i++)
                            {
                               
                               var va2 = AllDealWithSpectrumDicMulti.ElementAt(AllDealWithSpectrumDicMulti.Count - 1 - i);
                                AllDealWithSpectrumDic_Draw.Add(va2.Key,va2.Value);
                            }
                        }
                       else
                        {
                           for(int i=0;i< AllDealWithSpectrumDicMulti.Count;i++)
                            {

var va2 = AllDealWithSpectrumDicMulti.ElementAt(i);
                                AllDealWithSpectrumDic_Draw.Add(va2.Key, va2.Value);

}

}

}
                     Application.DoEvents();
                     DrawMultiSpec(va, AllDealWithSpectrumDic_Draw);//画多张谱图

count++;
                    //if (count > 2)
                    //{
                    //    form2.Close();
                    //    return;
                    //}
                    //Thread.Sleep(500);
                    form2.TopMost = true;
                    form2.BringToFront();
                }
                form2.Close();
           //}
           //);
           // threadA.IsBackground = true;       
           // threadA.Start();

});
        }

实例2

public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

private void button1_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => {
                Form form = new Form();
                form.StartPosition = FormStartPosition.CenterScreen;
                form.Width = 500;
                form.Height = 500;
                Button button = new Button();
                form.Controls.Add(button);
                button.Location = new Point(0, 0);
                button.Width = 50;
                button.Height = 20;
                button.Click += new EventHandler(button_Test_Click);
                form.ShowDialog();
                //或
                //Application.Run(form)
               // Application.DoEvents();唤醒窗体
                //form.Show();
            });

}
         private void button_Test_Click(object sender, EventArgs e)
        {
            Thread.Sleep(10000);//创建此button的工作线程阻塞,但是其他的,例如主ui线程不阻塞
        }
    }

c#中在工作线程创建窗体并操作相关推荐

  1. VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)

    这里废话不多讲了,因为项目原因,需要开启线程进行处理,在不了解线程的情况下,直接百度一下,然后就使用了,结果可想而知,出现了异常,所以花了一天时间系统学习一下多线程,这里主要是针对win32编程方面的 ...

  2. 在.Net中进行跨线程的控件操作(上篇:Control.Invoke)

    本文的重点在于介绍如何在多线程编程中,从非UI线程上访问界面中的控件.有过多线程编程经验的人都知道,当我们在非UI线程上试图给一个界面中的控件赋值的时候,比如说label的Text属性,系统会抛出一个 ...

  3. java中实现创建目录、创建文件的操作

    一.创建目录 mkdir()--仅创建一层目录,返回true或false. mkdirs()--创建一层或多层目录,返回true或false.   也就是,在通常情况下,使用mkdirs()即可满足创 ...

  4. MFC多线程的创建,包括工作线程和用户界面线程

    MFC多线程的创建 1.MFC多线程简介 MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的.每一个应用程序的执行都有一个主线程,这个主线程也是 ...

  5. python 结束子线程并保证工作完成_python3中在线程中结束工作进程的方法

    我想知道在python3中结束工作线程的方法.在 如果你看这个来自this question的代码示例,worker中有一个while True循环,我看到的是{}被调用了.在 为什么这个工人会自动结 ...

  6. 谈.Net委托与线程——解决窗体假死

    转自:http://www.cnblogs.com/smartls/archive/2011/04/08/2008981.html#2457370 引言 在之前的<创建无阻塞的异步调用>中 ...

  7. java中等待所有线程都执行结束

    使用CountDownLatch,这其实是最优雅的写法了,每个线程完成后都去将计数器减一,最后完成时再来唤醒 @Test public void testThreadSync3() { final V ...

  8. 线程池中运行的线程,当等待队列未满的情况下,一定不大于核心线程数吗

    通过<线程池内运行的线程抛异常,线程池会怎么办>了解到当线程执行的任务出现异常时,会将当前线程移出线程池,并新增一个线程到线程池中,我们先来回顾一下线程池的运行原理: 从原理图中可以看到只 ...

  9. SylixOS线程创建的流程分析

    概述 本文档的主要内容是分析SylixOS线程创建的流程,详细介绍了SylixOS的线程创建函数API_ThreadCreate. 环境和参数检查 在SylixOS中,线程的创建函数不能在中断中调用. ...

最新文章

  1. SSAS系列——【03】多维数据(多维数据集对象)
  2. GRDB使用SQLite的WAL模式
  3. 【大数据技术】操作系统和Hadoop版本选择
  4. 大话设计模式—命令模式
  5. 多帧点云数据拼接合并_自动驾驶:Lidar 3D传感器点云数据和2D图像数据的融合标注...
  6. 【Java】计算1!+2!+.....+20!的值
  7. 【写作技巧】如何给自己的毕业论文开个好头?
  8. popen 如何获取指令执行情况_php通过popen获取的一个命令的返回值如何分析出来...
  9. 翻译: Revisiting Contrastive Methods for Unsupervised Learning of Visual Representations
  10. Chrome 打不开网页,火狐却可以
  11. lefse分析本地实现方法带全部安装文件和所有细节,保证成功。
  12. python画图心形_通过matplotlib绘制心形
  13. mysql 5.7.31 忘记root密码怎么修改密码并实现远程登录
  14. 独家 | 爱奇艺如何用大数据助力娱乐工业革命?
  15. Design pattern : Singleton
  16. 第08课:子窗口交互
  17. 新年签通用php,《转帖》个人制作 猎人TMW字符串 三系整合通用 新年快乐帖
  18. 03-软件配置项管理计划
  19. 论文简读《Harmonizing Transferability and Discriminability for Adapting Object Detectors》
  20. 音视频开发之旅(16) OpenGL ES粒子效果-烟花爆炸

热门文章

  1. html worker api,worker_threads 工作线程
  2. java 屏蔽地域性访问_javaweb利用filter拦截未授权请求
  3. python列表框_「每日一练」Python列表框部件的运用
  4. python改文件名_python批量修改文件名、批量修改xml文件的path和filename
  5. 用铁丝做“电路板”,这波操作你不得不服!
  6. FPGA实现A5算法并仿真
  7. sqlalchemy安装以及使用_防火阀的安装以及使用特点详细介绍
  8. mysql存中文_mysql数据库存储中文数据的解决办法
  9. java mouselistener,Java MouseListener接口
  10. 安装JDK-- Java基础