要求:

1、  定义并使用委托实现如下输出:

Morning, Jimmy Zhang

早上好, 张子阳

2、 分别通过以下三种方式将信息添加到窗口中。

  • 第一种方式:直接向textBlock中添加信息
  • 第二种方式:通过调用方法向textBlock中添加信息
  • 第三种方式:通过多线程向textBlock中添加信息

3、如何在页面不停的显示字母“a”?

4、如何在页面不停的显示字母“a”和“b”?

效果:

前台源代码

<Window x:Class="ch003.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><Button Content="第一题" Height="25" HorizontalAlignment="Left" Margin="48,257,0,0" Name="button1" VerticalAlignment="Top" Width="61" Click="button1_Click" /><Button Content="第二题" Height="25" HorizontalAlignment="Left" Margin="147,257,0,0" Name="button2" VerticalAlignment="Top" Width="58" Click="button2_Click" /><Button Content="第三题" Height="22" HorizontalAlignment="Left" Margin="245,260,0,0" Name="button3" VerticalAlignment="Top" Width="59" Click="button3_Click" /><Button Content="第四题" Height="22" HorizontalAlignment="Left" Margin="347,260,0,0" Name="button4" VerticalAlignment="Top" Width="65" Click="button4_Click" /><ScrollViewer Height="209" HorizontalAlignment="Left" Margin="34,26,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="436" ><TextBlock Height="Auto" Name="textBlock1" Text="" TextWrapping="Wrap" /></ScrollViewer></Grid>
</Window>

后台源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;namespace ch003
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}//第一题private void button1_Click(object sender, RoutedEventArgs e){textBlock1.Text = "第一题(定义并使用委托)\n";Great("Jimmy Zhang", EnglishGreat);Great("张子阳",ChineseGreat);}public void ChineseGreat(string name){textBlock1.Text += "早上好," + name+"\n";}public void EnglishGreat(string name){textBlock1.Text += "Morning," + name+"\n";}public delegate void MakeGreating(string name);private void Great(string name,MakeGreating mg){mg(name);}//第二题private void button2_Click(object sender, RoutedEventArgs e){textBlock1.Text = "第二题(三种方式显示‘你好’)\n";//2.第一种textBlock1.Text += "你好\n";//2.第二种Add1();//2.第三种Thread t1 = new Thread(AddMessage);t1.Start();}private void Add1(){textBlock1.Text += "你好\n";}public delegate void AddMessageDelegate();private void AddMessage(){AddMessageDelegate d = Add2;textBlock1.Dispatcher.Invoke(d);}private void Add2(){textBlock1.Text += "你好";}//第三题private void button3_Click(object sender, RoutedEventArgs e){textBlock1.Text = "第三题(在页面不停的显示字母a)\n";Thread t2 = new Thread(MyShowa);t2.Start(); }public delegate void show();private void MyShowa(){show d = Show_a;for (int i = 1; i <= 100;i++ ){textBlock1.Dispatcher.Invoke(d);Thread.Sleep(100);}}private void Show_a(){textBlock1.Text += "a ";}//第四题private void button4_Click(object sender, RoutedEventArgs e){textBlock1.Text = "第四题(在页面不停的显示字母a和b)\n";Thread t3 = new Thread(MyShowa);t3.Start();Thread t4 = new Thread(MyShowb);t4.Start();}private void MyShowb(){show d = Show_b;for (int i = 1; i <= 100; i++){textBlock1.Dispatcher.Invoke(d);Thread.Sleep(100);}}private void Show_b(){textBlock1.Text += "b ";}}
}

ps:线程池的使用ThreadPool

在屏幕上不断地输出abcd并且可以停止

前台代码:

<Window x:Class="ch03.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><Label Content="委托与多线程" Height="24" HorizontalAlignment="Left" Margin="22,8,0,0" Name="label1" VerticalAlignment="Top" Width="132" /><ScrollViewer Height="219" HorizontalAlignment="Left" Margin="22,38,0,0" Name="scrollViewer1" VerticalAlignment="Top" Width="456"><TextBlock Height="auto" Name="textBlock1" Text="" TextWrapping="Wrap"/></ScrollViewer><Button Content="开始" Height="35" HorizontalAlignment="Left" Margin="72,264,0,0" Name="button1" VerticalAlignment="Top" Width="93" Click="button1_Click" /><Button Content="停止" Height="35" HorizontalAlignment="Left" Margin="319,264,0,0" Name="button2" VerticalAlignment="Top" Width="93" Click="button2_Click" /></Grid>
</Window>

后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;namespace ch03
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private static volatile bool isstop = false;private void button1_Click(object sender, RoutedEventArgs e){isstop = false;Data data1 = new Data { Message = "a", Info = "\n线程1已停止" };Thread t1 = new Thread(Mymethod);t1.Start(data1);Data data2 = new Data { Message = "b", Info = "\n线程2已停止" };Thread t2 = new Thread(Mymethod);t2.Start(data2);//使用线程池Data data3 = new Data { Message = "c", Info = "\n线程3已停止" };ThreadPool.QueueUserWorkItem(new WaitCallback(Mymethod),data3);Data data4 = new Data { Message = "d", Info = "\n线程4已停止" };ThreadPool.QueueUserWorkItem(new WaitCallback(Mymethod), data4);}public void Mymethod(object m){Data obj = m as Data;//类型转换while (isstop==false) {method(obj.Message);Thread.Sleep(100);}method(obj.Info);//输出结束语}public void method(string m){//委托 vs2010写法Action act = delegate(){textBlock1.Text += m;};textBlock1.Dispatcher.Invoke(act);}private void button2_Click(object sender, RoutedEventArgs e){isstop = true;}}public class Data{public string Info { get; set; }public string Message { get; set; }}
}

C#网络编程----(三)委托和多线程相关推荐

  1. 【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写

    参考连接:https://www.nowcoder.com/study/live/504/2/16. [Linux]网络编程一:网络结构模式.MAC/IP/端口.网络模型.协议及网络通信过程简单介绍 ...

  2. 网络编程模型及网络编程三要素

    网络模型 计算机网络之间以何种规则进行通信,就是网络模型研究问题. 网络模型一般是指 OSI(Open SystemInterconnection开放系统互连)参考模型 TCP/IP参考模型 网络模型 ...

  3. Java:网络编程,网络编程三要素,TCP协议,UDP协议

    day23 网络编程 网络编程三要素: IP地址 端口号 通信协议 TCP协议 UDP协议 网络编程 1.网络:计算机网络,由在不同地理位置.不同的计算机主机,互联形成的一个计算机系统.有通讯和数据共 ...

  4. Java——网络编程三要素

    * A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统.网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.* ...

  5. 22.1 网络编程:软件结构、网络通信协议、UDP与TCP协议、(网络编程三要素:协议、ip地址、端口号)、查看ip地址、检测网络是否连通、判断ip是否可用

    目录 网络编程 软件结构 网络通信协议 TCP/IP协议 协议分类 UDP TCP 网络编程三要素 协议 IP地址 列:查看本机ip地址 检查网络是否连通.判断ip是否可用 端口号 网络编程 软件结构 ...

  6. python 复习——网络编程(三)——网络基础、多线程、ftp任务铺垫

    一.网络基础 学习网络编程,了解一些网络基础的知识是必不可少的,下面学习一些基础的网络知识: 1.我们的电脑里有网卡,网卡里有mac地址: 2.我到某个地方插上网线,路由器或交换机中的DHCP服务为我 ...

  7. Linux 网络编程四(socket多线程升级版)

    //网络编程--客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

  8. C语言网络编程:TCP实现多线程实现多客户端

    TCP通信的编程模型如下: TCP通信是必须要有一个服务器,通过accept函数与客户端socket进行三次握手连接创建的通信描述符与客户端进行数据传输. 此时可以将accept函数的连接设置为多线程 ...

  9. linux多线程求和_(TCP IP网络编程)实验七 多线程编程

    一.实验目的 (1) 理解线程和进程的联系和区别: (2) 掌握Linux下和Windows下创建线程的方法: (3) 掌握Linux下和Windows下线程同步的方法: (4) 使用多线程机制实现L ...

  10. 网络编程模型综述 之 多线程模型

    每个连接对应一个线程 一个网络socket对应一个处理线程,socket采用阻塞I/O模型: 这种模型是小程序和java常用的策略,对于交互式的长连接应用也是常见的选择(比如BBS),也常用来做内部服 ...

最新文章

  1. android组件浮动在activity上_Jetpack Hilt 依赖注入框架上手指南
  2. 三座”大山“或让谷歌无人机送货项目被冻结
  3. 内存管理实战之打印指定进程虚存区
  4. C语言模拟实现(一)----- 优先权抢占式时间片调度算法
  5. 死锁终结者:顺序锁和轮询锁!
  6. 生信老司机以中心法则为主线讲解组学技术的应用和生信分析心得—限时免费
  7. php array_key_exists() 与 isset() 的区别
  8. CODEVS 3657 括号序列
  9. 小学生计算机考试软件,中小学生准考证制作打印软件
  10. 微信小程序实现腾讯地图定位功能修改地址功能
  11. OpenCV4学习笔记(27)——轮廓的最大内接圆
  12. EXCEL-日常技巧整理-2-单元格拆分后原数据填充
  13. 此计算机 未识别的网络,未识别的网络无网络访问解决方法(图文)
  14. 深度对话:系统学习还是野路子?
  15. Android 学习网址大全
  16. python排序输出人名,005_015 Python 人名按字母排序,首字母分组
  17. 磁盘管理-Linux系统磁盘管理
  18. Edge浏览器爱上WebVR
  19. 苹果微信更新不了最新版本_苹果iOS用户更新微信至版本7.0.13,可以进行微信号修改支持一年修改一次...
  20. Qcom平台 Camera 之单刷调试

热门文章

  1. Android 测试入门之---Monkey test
  2. tomcat6.0启动报错
  3. ntldr is missing什么意思应该如何解决
  4. 用示波器对单片机I2C时序进行图形波形分析的试验小结
  5. 在SSRS报表中,显示图片
  6. 13.15. ftp fs
  7. 由浅入深了解EventBus:(五)
  8. Android layoutInflate.inflate 方法具体解释,removeView()错误解决
  9. js面向对象技术小结
  10. 在 Silverlight 中管理动态内容交付,第 1 部分