线程(Thread) 与线程池(ThreadPool)

前台代码:

<DockPanel>
            <Label DockPanel.Dock="Top" Content="Thread和ThreadPool的基本用法" />
            <Border DockPanel.Dock="Bottom" >
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                    <Button x:Name="btnStart" Width="100"   Content="运行线程" Click="btnStart_Click"/>
                    <Button x:Name="btnstop"  Margin="30 0 0 0" Width="100" Content="停止线程" Click="btnstop_Click"/>

                </StackPanel>

            </Border>
            <ScrollViewer Background="White" TextBlock.LineHeight="20">
                <TextBlock x:Name="textBlock1" Margin="0 10 0 0" TextWrapping="Wrap"/>
            </ScrollViewer>
        </DockPanel>

(这部分的代码直接粘贴到,Grid标签中就行了)

 

后台代码

private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            MyClass.IsStop = false;
            textBlock1.Text = "";
            MyClass c = new MyClass(textBlock1);
            MyData state = new MyData {Message = "a",Info = "\n线程1已经停止了" };
            Thread t1 = new Thread(c.Method);
            t1.IsBackground = true;
            t1.Start(state);

            state = new MyData { Message = "b", Info = "\n线程2已经停止了" };
            Thread t2 = new Thread(c.Method);
            t2.IsBackground = true;
            t2.Start(state);

            state = new MyData { Message = "c", Info = "\n线程3已经停止了" };
            ThreadPool.QueueUserWorkItem(new WaitCallback(c.Method),state);

            state = new MyData { Message = "d", Info = "\n线程4已经停止了" };
            ThreadPool.QueueUserWorkItem(new WaitCallback(c.Method), state);
        }

        private void btnstop_Click(object sender, RoutedEventArgs e)
        {
            MyClass.IsStop = true;
        }

        public class MyClass {

            public static volatile bool IsStop;
            TextBlock textBlock1;
            public MyClass(TextBlock textBlock1)
            {
                this.textBlock1 = textBlock1;
            }
            public void Method(object obj) {
                MyData state = obj as MyData;
                while(IsStop == false){
                    ShowMessage(state.Message);
                    Thread.Sleep(100);
                }
                ShowMessage(state.Info);
            }
            public void ShowMessage(string str) {
                Action ac = delegate()
                {
                    textBlock1.Text += str;
                };
                textBlock1.Dispatcher.Invoke(ac);
            }
        
        }
        public class MyData{
            public string Info{get;set;}
            public string Message { get; set; }
        }
        

(可以直接粘贴,注意粘贴位置)

 

 

 

这个算是个小Demo,其实是照搬书上的,,,,一部分,,,

软件环境没什么要求,老师教的是VS2010的,so,不敢想这个年代了,我们学的知识居然还受限于软件版本。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值