C#网络编程----(三)委托和多线程
要求:
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#网络编程----(三)委托和多线程相关推荐
- 【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写
参考连接:https://www.nowcoder.com/study/live/504/2/16. [Linux]网络编程一:网络结构模式.MAC/IP/端口.网络模型.协议及网络通信过程简单介绍 ...
- 网络编程模型及网络编程三要素
网络模型 计算机网络之间以何种规则进行通信,就是网络模型研究问题. 网络模型一般是指 OSI(Open SystemInterconnection开放系统互连)参考模型 TCP/IP参考模型 网络模型 ...
- Java:网络编程,网络编程三要素,TCP协议,UDP协议
day23 网络编程 网络编程三要素: IP地址 端口号 通信协议 TCP协议 UDP协议 网络编程 1.网络:计算机网络,由在不同地理位置.不同的计算机主机,互联形成的一个计算机系统.有通讯和数据共 ...
- Java——网络编程三要素
* A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统.网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.* ...
- 22.1 网络编程:软件结构、网络通信协议、UDP与TCP协议、(网络编程三要素:协议、ip地址、端口号)、查看ip地址、检测网络是否连通、判断ip是否可用
目录 网络编程 软件结构 网络通信协议 TCP/IP协议 协议分类 UDP TCP 网络编程三要素 协议 IP地址 列:查看本机ip地址 检查网络是否连通.判断ip是否可用 端口号 网络编程 软件结构 ...
- python 复习——网络编程(三)——网络基础、多线程、ftp任务铺垫
一.网络基础 学习网络编程,了解一些网络基础的知识是必不可少的,下面学习一些基础的网络知识: 1.我们的电脑里有网卡,网卡里有mac地址: 2.我到某个地方插上网线,路由器或交换机中的DHCP服务为我 ...
- Linux 网络编程四(socket多线程升级版)
//网络编程--客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...
- C语言网络编程:TCP实现多线程实现多客户端
TCP通信的编程模型如下: TCP通信是必须要有一个服务器,通过accept函数与客户端socket进行三次握手连接创建的通信描述符与客户端进行数据传输. 此时可以将accept函数的连接设置为多线程 ...
- linux多线程求和_(TCP IP网络编程)实验七 多线程编程
一.实验目的 (1) 理解线程和进程的联系和区别: (2) 掌握Linux下和Windows下创建线程的方法: (3) 掌握Linux下和Windows下线程同步的方法: (4) 使用多线程机制实现L ...
- 网络编程模型综述 之 多线程模型
每个连接对应一个线程 一个网络socket对应一个处理线程,socket采用阻塞I/O模型: 这种模型是小程序和java常用的策略,对于交互式的长连接应用也是常见的选择(比如BBS),也常用来做内部服 ...
最新文章
- android组件浮动在activity上_Jetpack Hilt 依赖注入框架上手指南
- 三座”大山“或让谷歌无人机送货项目被冻结
- 内存管理实战之打印指定进程虚存区
- C语言模拟实现(一)----- 优先权抢占式时间片调度算法
- 死锁终结者:顺序锁和轮询锁!
- 生信老司机以中心法则为主线讲解组学技术的应用和生信分析心得—限时免费
- php array_key_exists() 与 isset() 的区别
- CODEVS 3657 括号序列
- 小学生计算机考试软件,中小学生准考证制作打印软件
- 微信小程序实现腾讯地图定位功能修改地址功能
- OpenCV4学习笔记(27)——轮廓的最大内接圆
- EXCEL-日常技巧整理-2-单元格拆分后原数据填充
- 此计算机 未识别的网络,未识别的网络无网络访问解决方法(图文)
- 深度对话:系统学习还是野路子?
- Android 学习网址大全
- python排序输出人名,005_015 Python 人名按字母排序,首字母分组
- 磁盘管理-Linux系统磁盘管理
- Edge浏览器爱上WebVR
- 苹果微信更新不了最新版本_苹果iOS用户更新微信至版本7.0.13,可以进行微信号修改支持一年修改一次...
- Qcom平台 Camera 之单刷调试