首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

新手初学线程有关问题

2013-12-21 
新手初学线程问题?private DateTime starttime new DateTime()private void button5_Click(object send

新手初学线程问题?

        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是可以有参数的。
[解决办法]

引用:
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"
    ...
}

热点排行