在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一:线程 //不带参数
ThreadStart ts = new ThreadStart(ThreadFunc);
Thread t = new Thread(ts);
t.Start();
//带参数
ParameterizedThreadStart ParStart = new ParameterizedThreadStart(GoTo);
Thread myThread = new Thread(ParStart);
object o = (object)txt_url.Text;
myThread.Start(o);
详细实例代码: Program p = new Program();
Thread nonParameterThread = new Thread(new ThreadStart(p.NonParameterRun));
nonParameterThread.Start();
Thread parameterThread = new Thread(new ParameterizedThreadStart(p.ParameterRun));
parameterThread.Name = "Thread A:";
parameterThread.Start(30);
/// <summary>
/// 不带参数的启动方法
/// </summary>
public void NonParameterRun()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("系统当前时间毫秒值:"+DateTime.Now.Millisecond.ToString());
Thread.Sleep(200);//让线程暂停
}
}
/// <summary>
/// 带参数的启动方法
/// </summary>
/// <param name="ms">让线程在运行过程中的休眠间隔</param>
public void ParameterRun(object ms)
{
int j = 10;
int.TryParse(ms.ToString(), out j);//这里采用了TryParse方法,避免不能转换时出现异常
for (int i = 0; i < 10; i++)
{
Console.WriteLine(Thread.CurrentThread.Name+"系统当前时间毫秒值:" + DateTime.Now.Millisecond.ToString());
Thread.Sleep(j);//让线程暂停
}
}
二:委托 private static void WriteStrToFile(string txt)
{
write(txt);
}
private delegate void WriteStrToFileDelegate(string txt);//定义委托
new WriteStrToFileDelegate(WriteStrToFile).BeginInvoke(txt, null, null);//异步使用委托
再举一例: public delegate void GreetingDelegate(string name);//定义委托
//定义两方法
private static void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
}
private static void ChineseGreeting(string name) {
Console.WriteLine("早上好, " + name);
}
使用: private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);//这里默认同步方式,与MakeGreeting.Invoke(name)效果一样
}
//使用
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
实际上,我们可以也可以绕过GreetPeople方法,通过委托来直接调用EnglishGreeting和ChineseGreeting: GreetingDelegate delegate1;
delegate1 = EnglishGreeting; // 先给委托类型的变量赋值
delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法
// 将先后调用 EnglishGreeting 与 ChineseGreeting 方法
delegate1 ("Jimmy Zhang");
Console.ReadKey();
委托其实也是一个线程
MethodInvoker mi = new MethodInvoker(DoPay);//定义委托
this.BeginInvoke(mi);
你自己写一个 Public Delegate Sub ABC, 这个时候ABC和MethodInvoker是完全一样的。所以.Net 提供这个只是为了方便你编写,省得你自己再写一堆一样的委托了。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论