1. Thread
C# 程序中,如果要新建一个 Thread 的话,一般需要另建一个 方法,如果要传参数的话,需要的步骤比较麻烦,
参考一
Thread oThread = new Thread(new ThreadStart(threadMethod));
private void threadMethod(){
..
};
如果要向线程传递参数
public static void myStaticParamThreadMethod(Object obj) {
Console.WriteLine(obj);
}
Thread thread = new Thread(myStaticParamThreadMethod);
thread.start(obj);
当然还有其他的一些写法,可以参见参考1查看更详细的信息
但如果使用匿名类的话,则会简单些
Thread oThread = new Thread(delegate()
{
....
});
oThread.Start();
2.Control.Invoke
C#中, 调用如果多线程更新 UI的属性时,会报异常:Cross-thread operation not valid
一般的解决方法是声明一个委托,然后通过委托也调用,具体见参考2
private delegate void FlushClient();//代理
private void ThreadFunction()
{
if (textBox1.InvokeRequired)//等待异步
{
FlushClient fc = new FlushClient(ThreadFunction);
this.Invoke(fc);//通过代理调用刷新方法
return;
}
textBox1.Text = DateTime.Now.ToString();
}
这里要先声明一个委托,感觉比较麻烦,因为总要多写一些委托,而这些委托却是临时一个过渡,改成匿名委托后就不需要再去声明那些委托了
private void ThreadFunction()
{
if (textBox1.InvokeRequired)//等待异步
{
this.Invoke(new MethodInvoker(delegate()
{
ThreadFunction();
}));
return;
}
textBox1.Text = DateTime.Now.ToString();
}
代码量没有减少,但是却不必要去声明那个临时用的委托了
参考1: http://developer.51cto.com/art/200908/141590.htm
参考2: http://www.cnblogs.com/zhaotiantang/archive/2009/03/17/1414135.html