锁定线程和管理锁的问题
我在评论区域的这个代码有问题“挂表单”
我的程序会挂在那里! 什么问题?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication28 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } BackgroundWorker backgw = new BackgroundWorker(); private void button1_Click(object sender, EventArgs e) { backgw.DoWork += new DoWorkEventHandler(k_DoWork); ParameterizedThreadStart start = new ParameterizedThreadStart(startthread); System.Threading.Thread u; int i = 0; while (i < 100) { //u = new System.Threading.Thread(start); //u.Start(i); //1.with thread way backgw.RunWorkerAsync(i); //2.with backgw way Thread.Sleep(1000); lock (y) { Thread.Sleep(1000); } lock(h) i++; } } delegate void j(int h); j b; object h = new object(); object y = new object(); void startthread(object m) { Monitor.Enter(h); Monitor.Enter(y); p1((int)m); Monitor.Exit(h); } void p1(int h) { b = delegate(int q) { label1.Text = string.Format("Step is :{0}", h.ToString()); }; Monitor.Exit(y); label1.Invoke(b); //hang the form???? } void k_DoWork(object sender, DoWorkEventArgs e) { Monitor.Enter(h); Monitor.Enter(y); p1((int)e.Argument); Monitor.Exit(h); } } }
调用等待函数返回。 UI线程将运行循环几分钟,工作线程将等待UI线程调用并返回。
使用BeginInvoke将任务置于UI线程上而不会阻塞。
链接地址: http://www.djcxy.com/p/57927.html上一篇: problem with lock in thread &managment lock
下一篇: Using of threads to update labels after receiving string from bluetooth