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() 这里,只有请求响应的过程全部完成了才会执行 ...
随机推荐
- bzoj3687简单题*
bzoj3687简单题 题意: 给个集合,求所有子集的元素和的异或和.集合元素个数≤1000,整个集合的元素和≤2000000 题解: 用bitset维护每个子集元素和的个数是奇数还是偶数.每次读入一 ...
- java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 Hadoop完全分布式运行模式 步骤分析: 编写集群分发脚本xsync 集群配置 集群部署规划 配置集群 集群单 ...
- Kafka 信息整理
请说明什么是传统的消息传递方法? 传统的消息传递方法包括两种: ·排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人. ·发布-订阅:在这个模型中,消息被广播给所有的用户. 为 ...
- Ethical Hacking - GAINING ACCESS(13)
CLIENT SIDE ATTACKS Backdoor delivery method2 - backdooring exe downloads Backdoor any exe the targe ...
- 记录一次升级ant-design-vue的遇见的bug
记录一次升级ant-design-vue的遇见的bug 使用版本: "version": "2.5.2" "ant-design-vue": ...
- jmeter 及测试(转载)
负载测试:在一定的工作负荷下,给系统造成的负荷及系统响应的时间. 压力测试:在一定的负荷条件下,长时间连续运行系统给系统性能造成的影响. 1.性能测试(Performance Test):通常收集 ...
- echarts 实战 : 怎么处理特殊的图表数字 label ?
所谓Label,就是在图表上面显示的那个数字. 但有的时候我们需要柱状图堆叠. 那如果我们需要所有数字都在外面,并且以 320/210/310/410/1320 这样的形式显示呢? 那么 echart ...
- 【题解】cf1381c Mastermind
序 (一道很考验思维质量的构造好题,而且需要注意的细节也很多.) 本题解主体使用的是简洁且小常数的\(O(nlogn)\)时间复杂度代码,并且包含其他方法的分析留给读者自行实现(其实是自己不会写或者写 ...
- NAS存储的定义和优势介绍
今天来跟大家分享下私有云的一种应用形式NAS.作为常见的个人和家庭私有云存储方案,NAS就像我们随身的数据存储中心,它有低损耗高效率的特点,那么NAS如何搭建,家用NAS存储有哪些优势呢,一起来看看吧 ...
- Nginx配置各种响应头防止XSS,点击劫持,frame恶意攻击
为什么要配置HTTP响应头? 不知道各位有没有被各类XSS攻击.点击劫持 (ClickJacking. frame 恶意引用等等方式骚扰过,百度联盟被封就有这些攻击的功劳在里面.为此一直都在搜寻相关防 ...