突然想到很久没有用到异步了,所以花了一个下午的时间重新复习一下,写的比较简单,如果是大牛或者想批评的请绕行,我只是想给初学者和自己留个记录好以后看
我的业务思路是这样的:
前台接电话
接电话的同时她得拿笔记录客户的信息吧
那这种一边接电话一边记录就是异步咯
还有接完电话,他得把客户信息交给服务员,让他去招呼客户
这个就是异步回调咯
废话不说 直接贴代码,每句话我都有注释了,不懂可以留言,我有上博客园就一定回
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.Remoting.Messaging;
namespace Background
{
//声明一个接电话的委托
public delegate string CallPeoleDelegate();
//声明一个接完电话的委托
public delegate void MessageDelegate(string message);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//接电话按钮
private void button1_Click(object sender, EventArgs e)
{
//接客
this.textBox1.AppendText("接客\r\n");
//接电话
CallPeoleDelegate p = new CallPeoleDelegate(Call);
//接电话中..
IAsyncResult ar = p.BeginInvoke(CallPeople, null);
//记录客人信息
Writer();
//是否接电话完成
bool flag = true;
while (flag)
{
//没完成,继续
this.textBox1.AppendText(string.Format("正在咨询其他问题...\r\n"));
//模拟正在接电话,每1秒一次
flag = !ar.AsyncWaitHandle.WaitOne(1000);
}
}
//把信息显示到文本框
void showmessage(string message)
{
this.textBox1.AppendText(message);
}
//接电话
public string Call()
{
Thread.Sleep(3000);
return "电话接完,已经交给服务员";
}
//记录
public void Writer()
{
this.textBox1.Text += "客户名称:小明\r\n电话12312324234\r\n";
}
//把客户信息提交给服务员
public void CallPeople(IAsyncResult ar)
{
//实例化接完电话委托
MessageDelegate m = new MessageDelegate(showmessage);
//声明异步回调对象
AsyncResult result = (AsyncResult)ar;
//获取异步回调对象
CallPeoleDelegate pd = (CallPeoleDelegate)result.AsyncDelegate;
//得到Call方法返回值
string message = pd.EndInvoke(ar);
//判断线程是否同步
if (this.InvokeRequired)
{
//同步,调用接完电话方法,并把返回值传递进去
this.Invoke(m, message);
}
}
}
}
Dome在这里https://files.cnblogs.com/linyijia/%E5%BC%82%E6%AD%A5%E5%9B%9E%E8%B0%83.rar
有点累了,就写到这里吧 里面还是有些不足的,以后有时间再补上去
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)