新手初学线程问题?
private DateTime starttime = new DateTime();
private void button5_Click(object sender, EventArgs e)
{
starttime=DateTime.Now;
Thread thread = new Thread(new ThreadStart(Dosomething));
thread.IsBackground = true;
thread.Start();
}
private void Dosomething( )
{
while(true)
{
DateTime now = DateTime.Now;
Thread.Sleep(100);
if (now.Second > starttime.Second+10)
{
//其它处理
break;
}
}
}
问题1 break实行后这个线程是否还在运行?
问题2 Dosomething可不可以有参数?如Dosomething(int para)等等.
[解决办法]
1、break跳出循环。如果事情干完了,就结束。
2、可以带参数。http://blog.csdn.net/wangzh300/article/details/6969354
[解决办法]
new Thread(new ThreadStart(() =>
{
Dosomething("aa");
})).Start();
private void Dosomething(string aa)
{
while(true)
{
DateTime now = DateTime.Now;
Thread.Sleep(100);
if (now.Second > starttime.Second+10)
{
//其它处理
break;
}
}
}
[解决办法]
1.应该完了
2.可以有参带数的
以前版本的多线程
1)
Thread t=new Thread(Foo);
t.Start();
2)带能的
Thread t=new Thread(Foo);
t.Start(ob);//一个object的参数
3)带自定义参数,返回值
Func<int, int> foo = (v) => { return v; };
AsyncCallback callBack = new AsyncCallback((v) => { Console.WriteLine(foo.EndInvoke(v)); }); //EndInvoke()取返回值
foo.BeginInvoke(10, callBack, null);
[解决办法]
1.break与线程是否结束无关
2.dosomething也与线程无关,随便你怎么弄
------解决方案--------------------
线程是根据事件状态的,事件完成,线程就结束了。
你程序里break;一下,就跳出while,也就完成了。
[解决办法]
break;跳出循环,由于后面没有可执行代码,所以线程结束。
Dosomething是可以有参数的。
[解决办法]
+1
[解决办法]
1.break跳出循环后,线程的传入的函数Dosomething就执行完了,线程将结束
2.new?ThreadStart还有一个重载是传参的,类型是object,也就是说你可以传任何类型
new ThreadStart(Dosomething, "abc") 传一个字符串
private void Dosomething(object state)
{
var arg = (string)state; //传进来的"abc"
...
}
[解决办法]
1、
break 中断退出当前循环。
contine 继续接下来的循环。
return 返回,相当于退出循环,一般在方法中作用。
2、
2.new ThreadStart还有一个重载是传参的,类型是object,也就是说你可以传任何类型
new ThreadStart(Dosomething, "abc") 传一个字符串
private void Dosomething(object state)
{
var arg = (string)state; //传进来的"abc"
...
}