解决方案 »
- TXT记录排序方法
- 请教操作WebBrowser的几行代码
- 如何实现这种打印?
- 话说C#里有没有这么一个功能
- 怎么输入的中文变成了乱码了?????高手请进!!!大侠们快说说怎么回事???
- MM100分在线求教。有谁看过这个xpdl_parser,C#写的解析器。
- 请教一个在WinForm DataGrid中显示标题文字的问题
- 高分求教,高手请进:关于控件设计的问题!!!!!!!
- 请问各位大侠:在C#中使用ADO(托管的COM)如何添加记录??!
- C++中sprintf(archiveName,"archive.out");在C#里是怎么写?
- Winform FTP 服务器上传出现错误!!
- 求将文件路径扩展名(doc/txt)替换为mp3的C#正则表达式
public delegate void mydel(); public partial class Form1 : Form
{
..... public void dele()
{
if (label1.InvokeRequired)//判断是否需要使用委托
{
label1.Invoke(new mydel(fun));
}
else
{
fun();
}
} ....
}
using System.Threading;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private ManualResetEvent _ManualResetEvent = new ManualResetEvent(true); public Form1()
{
InitializeComponent();
} private Boolean _bStop = false; delegate void mydel(); public void dele()
{
mydel d = new mydel(fun);
label1.Invoke(d);
} public void fun()
{
while (!_bStop)
{
label1.Invoke(new MethodInvoker(delegate()
{
int x = Convert.ToInt32(label1.Text);
x++;
label1.Text = Convert.ToString(x);
})); _ManualResetEvent.WaitOne();
}
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_ManualResetEvent.Set();
_ManualResetEvent.Close();
_ManualResetEvent = null;
} private void button1_Click(object sender, EventArgs e)
{
_bStop = false; Thread thread = new Thread(new ThreadStart(fun));
label1.Text = "0";
thread.IsBackground = true;
thread.Start();
this.Invoke(new MethodInvoker(delegate()
{
button1.Enabled = false;
button2.Enabled = true;
button3.Enabled = false;
button4.Enabled = true;
}));
} private void button2_Click(object sender, EventArgs e)
{
_ManualResetEvent.Reset(); this.Invoke(new MethodInvoker(delegate()
{
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = true;
button4.Enabled = false;
}));
} private void button3_Click(object sender, EventArgs e)
{
_ManualResetEvent.Set(); this.Invoke(new MethodInvoker(delegate()
{
button1.Enabled = false;
button2.Enabled = true;
button3.Enabled = false;
button4.Enabled = true;
}));
} private void button4_Click(object sender, EventArgs e)
{
_bStop = true; _ManualResetEvent.Set();
_ManualResetEvent.Close();
_ManualResetEvent = null; this.Invoke(new MethodInvoker(delegate()
{
label1.Text = "0";
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
button3.Enabled = false;
}));
}
}
}Suspend和Resume已经过时了,可以不用
Abort也不要用
在构造函数里加上这句话CheckForIllegalCrossThreadCalls = false;
就可以直接访问了!
具体意思,msdn或者百度一下!
再慢慢加上你的逻辑,看哪一步出错了。
c# 线程间操作无效: 从不是创建控件“”的线程访问它。
http://topic.csdn.net/u/20120805/01/58230777-2767-4337-a8f8-a3725e7db4b1.html