C# ASP 异步存储数据
1.异步委托
在导航栏接收到提交的请求后,调用个各子画面的保存答案方法,之后实例化委托 saveToDB 。
当执行BeginInvoke后,服务器会另起线程执行saveToDB里的的方法,因为这里要保存的数据较多,所以要呈现下一个页面,
也就是:Response.Redirect("~/Default.aspx");调用后,画面虽然迁移了,后台还在执行saveToDB里的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.HtmlControls;
using System.Drawing; public partial class SiteMaster : System.Web.UI.MasterPage
{
public delegate void ThreadHandler();//异步委托
BasePage currentPage = null;
protected void Page_Load(object sender, EventArgs e)
{
string strUrl = Request.Url.ToString(); if (strUrl.Contains("Questionnaire"))//只有在答题页面
{
currentPage = Page as BasePage;
}
} // 导航栏事件
protected void MenuMaster_MenuItemClick(object sender, MenuEventArgs e)
{
string strUrl = Request.Url.ToString(); Menu menu = (Menu)sender;
//提交问卷,所有答案入库
if (menu.SelectedValue == "SubmitAns")
{
if (strUrl.Contains("Questionnaire"))//只有在答题页面
{
int position_1 = strUrl.LastIndexOf("Questionnaire") + ;
int position_2 = strUrl.LastIndexOf(".");
string strCurrentNum = strUrl.Substring(position_1, position_2 - position_1);
int num = int.Parse(strCurrentNum); if (checkInput())//输入Check
{
return;
}
saveAnswer(num, true, false); AsyncCallback callback = new AsyncCallback(Callback); //回调函数声明
ThreadHandler ad = new ThreadHandler(saveToDB);//实例化委托类型
IAsyncResult ar = ad.BeginInvoke(callback, ad);//开始调用 }
Response.Redirect("~/Default.aspx");
}
} private bool checkInput()
{
return currentPage.checkInput();
} private bool saveAnswer(int num, bool isSubmit, bool isNext)
{
if (num == && !isSubmit && !isNext)
{
currentPage.saveAnswer();
Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('已经是第一道题');</script>");
return false;
}
else if (num == && !isSubmit && isNext)
{
currentPage.saveAnswer();
Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('已经是最后一道题');</script>");
return false;
}
else if (num == )
{
String className = (String)Request.Form.Get("className");
String authorName = (String)Request.Form.Get("authorName");
currentPage.saveAnswer(className, authorName);
}
else if (num == )
{
String projectName = (String)Request.Form.Get("projectName");
String DropDownList1 = (String)Request.Form.Get("ctl00$MainContent$DropDownList1");
String DropDownList2 = (String)Request.Form.Get("ctl00$MainContent$DropDownList2");
currentPage.saveAnswer(projectName, DropDownList1, DropDownList2);
}
else if (num == )
{
String Ctime = (String)Request.Form.Get("Ctime");
String Cname = (String)Request.Form.Get("Cname");
currentPage.saveAnswer(Ctime, Cname);
}
else
{
currentPage.saveAnswer();
}
return true;
} private void saveToDB()
{
UserInfo user = (UserInfo)Session["UserInfo"];
Answer answer = (Answer)Session["Answer"];
Dao dao = new Dao();//所有答案入库
lock (answer)
{
//Thread.Sleep(10000);
if (answer != null)
{
answer.Userid = user.Pkid;
if (user.Status == "")
{
dao.saveAnswer(answer);
}
else
{
dao.updateAnswer(answer);
}
dao.updateUser(user.Pkid.ToString(), "");
dao.ConvertToView(answer);
}
}
} /// <summary>
/// 回掉函数
/// </summary>
/// <param name="ar"></param>
void Callback(IAsyncResult ar)
{
ThreadHandler andl = (ThreadHandler)ar.AsyncState;
andl.EndInvoke(ar);
}
}
C# ASP 异步存储数据的更多相关文章
- python连接数据库异步存储
当同步写入数据库时,可能会发生下载速度很快,但是写入速度很慢的情况,因此我们采用异步存储写入数据库. 实现异步写入mysql数据库的思路: 1,将数据库的连接数据写入到settings文件中,供后面自 ...
- ASP模拟POST请求异步提交数据的方法
这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...
- 微信小程序 路由跳转 异步请求 存储数据,微信登录接口
1小程序路由跳转 wx.switchTab(Object object) 这里的tabBar是底下的导航栏指定的页面 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 tabBar l ...
- 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递
通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...
- 项目中使用的ajax异步读取数据结构设计
设计稍微复杂了一点,完成ajax读取功能涉及到了很多页面.虽然如此,但感觉比较灵活. 和传统方法唯一的区别在于多了一层数据容器控件,里面提供了显示数据的HTML元素及相应的JS方法. 这样数据控件指生 ...
- C# 实现的多线程异步Socket数据包接收器框架
转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...
- .net core2.0下使用Identity改用dapper存储数据
前言. 已经好多天没写博客了,鉴于空闲无聊之时又兴起想写写博客,也当是给自己做个笔记.过了这么些天,我的文笔还是依然那么烂就请多多谅解了.今天主要是分享一下在使用.net core2.0下的实际遇到的 ...
- vue 本地存储数据 sessionStorage
在vuex 下的 action下的userAction.js中添加 export function login(from, self) { axPost('/api/login', from, fun ...
- 获取异步API数据
异步操作应该是以前学习 ajax 时才被明确提及,就目前的理解,同步就是同一时间只能做一件事,如果使用 ajax同步模式,则代码会卡在 xhr.send() 这里,只有请求响应的过程全部完成了才会执行 ...
随机推荐
- 万字长文,62道Java核心面试题,一次性打包送给积极向上的你
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...
- Ethical Hacking - NETWORK PENETRATION TESTING(2)
ALFA AWUS 1900 RTL8814AU https://www.alfa.com.tw/products_detail/2.htm Follow the guide on aircrac ...
- 痞子衡嵌入式:SNVS Master Key仅在i.MXRT10xx Hab关闭时才能用于DCP加解密
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列中数据协处理器DCP使用SNVS Master Key加解密的注意事项. i.MXRT不仅仅是处理性能超强的MCU,也是 ...
- 集训作业 洛谷P3913 车的攻击
这个题一开始被我想复杂了,但总体差不多. 脑子清醒后我直接看他占领了几条长,几条宽,比如一个长3宽3的地图. 被占领了一条宽,就可以看成一个长3宽2的地图.这个长3宽2的地图就是出去可以被攻击的点剩下 ...
- 简单实用的办公软件导航网站,IT经理必备工具
最近非常忙,因为公司上线了业财一体化系统.今天分享一个非常实用的办公软件导航网站,节省了我很多百度的时间. 快氪导航,让软件服务更简单. 一.办公软件导航 站长已经按照功能进行了分类:协同办公,流程审 ...
- 【揭秘】C语言类型转换时发生了什么?
ID:技术让梦想更伟大 作者:李肖遥 链接:https://mp.weixin.qq.com/s/ZFf3imVaJgeesuhl1Kn9sQ 在C语言中,数据类型指的是用于声明不同类型的变量或函数的 ...
- 【mysql】- 索引简介篇
简介 我们都知道mysql使用存储引擎的是InnoDB,InnoDB使用的索引的对应的数据结构是B+树 结构图: 如上图所示,我们实际用户记录是存放在B+树的最底层的节点上,这些节点也被称为叶子节点或 ...
- Linux字符集的查看及修改[转]
一·查看字符集字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 1.[root@david ~]# echo $LANGzh_CN.G ...
- asp.net core appsetting.json 绑定读取
appsettings.json中,具有: "AppSettings": { "AzureConnectionKey": "***", &q ...
- Thymeleaf从入门到精通
什么是Thymeleaf 大家好,我是bigsai,今天我们来学习Thymeleaf,如果你对Thymeleaf比较陌生也不要紧,它很容易学习与理解,并有着自己鲜明的特色. 开始之前,我们依旧问一个问 ...