c#中在工作线程创建窗体并操作
实例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#中在工作线程创建窗体并操作相关推荐
- VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)
这里废话不多讲了,因为项目原因,需要开启线程进行处理,在不了解线程的情况下,直接百度一下,然后就使用了,结果可想而知,出现了异常,所以花了一天时间系统学习一下多线程,这里主要是针对win32编程方面的 ...
- 在.Net中进行跨线程的控件操作(上篇:Control.Invoke)
本文的重点在于介绍如何在多线程编程中,从非UI线程上访问界面中的控件.有过多线程编程经验的人都知道,当我们在非UI线程上试图给一个界面中的控件赋值的时候,比如说label的Text属性,系统会抛出一个 ...
- java中实现创建目录、创建文件的操作
一.创建目录 mkdir()--仅创建一层目录,返回true或false. mkdirs()--创建一层或多层目录,返回true或false. 也就是,在通常情况下,使用mkdirs()即可满足创 ...
- MFC多线程的创建,包括工作线程和用户界面线程
MFC多线程的创建 1.MFC多线程简介 MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的.每一个应用程序的执行都有一个主线程,这个主线程也是 ...
- python 结束子线程并保证工作完成_python3中在线程中结束工作进程的方法
我想知道在python3中结束工作线程的方法.在 如果你看这个来自this question的代码示例,worker中有一个while True循环,我看到的是{}被调用了.在 为什么这个工人会自动结 ...
- 谈.Net委托与线程——解决窗体假死
转自:http://www.cnblogs.com/smartls/archive/2011/04/08/2008981.html#2457370 引言 在之前的<创建无阻塞的异步调用>中 ...
- java中等待所有线程都执行结束
使用CountDownLatch,这其实是最优雅的写法了,每个线程完成后都去将计数器减一,最后完成时再来唤醒 @Test public void testThreadSync3() { final V ...
- 线程池中运行的线程,当等待队列未满的情况下,一定不大于核心线程数吗
通过<线程池内运行的线程抛异常,线程池会怎么办>了解到当线程执行的任务出现异常时,会将当前线程移出线程池,并新增一个线程到线程池中,我们先来回顾一下线程池的运行原理: 从原理图中可以看到只 ...
- SylixOS线程创建的流程分析
概述 本文档的主要内容是分析SylixOS线程创建的流程,详细介绍了SylixOS的线程创建函数API_ThreadCreate. 环境和参数检查 在SylixOS中,线程的创建函数不能在中断中调用. ...
最新文章
- SSAS系列——【03】多维数据(多维数据集对象)
- GRDB使用SQLite的WAL模式
- 【大数据技术】操作系统和Hadoop版本选择
- 大话设计模式—命令模式
- 多帧点云数据拼接合并_自动驾驶:Lidar 3D传感器点云数据和2D图像数据的融合标注...
- 【Java】计算1!+2!+.....+20!的值
- 【写作技巧】如何给自己的毕业论文开个好头?
- popen 如何获取指令执行情况_php通过popen获取的一个命令的返回值如何分析出来...
- 翻译: Revisiting Contrastive Methods for Unsupervised Learning of Visual Representations
- Chrome 打不开网页,火狐却可以
- lefse分析本地实现方法带全部安装文件和所有细节,保证成功。
- python画图心形_通过matplotlib绘制心形
- mysql 5.7.31 忘记root密码怎么修改密码并实现远程登录
- 独家 | 爱奇艺如何用大数据助力娱乐工业革命?
- Design pattern : Singleton
- 第08课:子窗口交互
- 新年签通用php,《转帖》个人制作 猎人TMW字符串 三系整合通用 新年快乐帖
- 03-软件配置项管理计划
- 论文简读《Harmonizing Transferability and Discriminability for Adapting Object Detectors》
- 音视频开发之旅(16) OpenGL ES粒子效果-烟花爆炸
热门文章
- html worker api,worker_threads 工作线程
- java 屏蔽地域性访问_javaweb利用filter拦截未授权请求
- python列表框_「每日一练」Python列表框部件的运用
- python改文件名_python批量修改文件名、批量修改xml文件的path和filename
- 用铁丝做“电路板”,这波操作你不得不服!
- FPGA实现A5算法并仿真
- sqlalchemy安装以及使用_防火阀的安装以及使用特点详细介绍
- mysql存中文_mysql数据库存储中文数据的解决办法
- java mouselistener,Java MouseListener接口
- 安装JDK-- Java基础