前台代码:
<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,不敢想这个年代了,我们学的知识居然还受限于软件版本。