//定时器每秒执行一次
private void timer1_Tick(object sender, EventArgs e)
{
thread1= new Thread(new ThreadStart(zairuthread));
thread1.IsBackground = true;
thread1.Start();
}
private void zairuthread()
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler(zairu), null);
}
else
{
zairu(this, null);
}
}
private void zairu(object sender, EventArgs e)
{
mvideo.GrabImage("D:\\1.jpg");//截图
List<Image> list = new List<Image>();
list = FaceFind.FaceShowzhuye(pictureBox_get.Width, pictureBox_get.Height, "D:\\1.jpg");
int i = list.Count;
switch (i)
{
case 1:
pictureBox_get.Image = list[0];
}
thread1.Abort();
thread1.Join();
}
4 个解决方案
#1
将zairu中不涉及操作界面的代码放在zairuthread里面,invoke中的代码相当于单线程,当然会挂起UI。
#2
开那个线程不是画蛇添足么,最后还是绕到主线程去运行。
#3
在timer的Tick中加入断点,调试下,虽然界面卡, 但是timer也不应该只执行一次,没看到你timer相关的代码,不知道你timer是否是做了其他的一些处理导致了。
#4
应该是 zairu 中的代码耗时,invoke是已经不在线程中执行了,是主进程的
#1
将zairu中不涉及操作界面的代码放在zairuthread里面,invoke中的代码相当于单线程,当然会挂起UI。
#2
开那个线程不是画蛇添足么,最后还是绕到主线程去运行。
#3
在timer的Tick中加入断点,调试下,虽然界面卡, 但是timer也不应该只执行一次,没看到你timer相关的代码,不知道你timer是否是做了其他的一些处理导致了。
#4
应该是 zairu 中的代码耗时,invoke是已经不在线程中执行了,是主进程的