mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
DotNET
DotNET

VS2005中BackgroundWorker组件的使用经验

    在VS2005中添加了BackgroundWorker组件,该组件在多线程编程方面使用起来非常方便,然而在开始时由于没有搞清楚它的使用机制,走了不少的弯路,现在把我在使用它的过程中的经验与诸位分享一下。    BackgroundWorker类中主要用到的有这列属性、方法和事件:    重要属性:    1、CancellationPending             获取一个值,指示应用程序是否已请求取消后台操作。通过在DoWork事件中判断CancellationPending属性可以认定是否需要取消后台操作(也就是结束线程);    2、IsBusy                          获取一个值,指示 BackgroundWorker 是否正在运行异步操作。程序中使用IsBusy属性用来确定后台操作是否正在使用中;    3、WorkerReportsProgress           获取或设置一个值,该值指示BackgroundWorker能否报告进度更新    4、WorkerSupportsCancellation      获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。设置WorkerSupportsCancellation为true使得程序可以调用CancelAsync方法提交终止挂起的后台操作的请求;    重要方法:    1、CancelAsync         请求取消挂起的后台操作    2、RunWorkerAsync      开始执行后台操作    3、ReportProgress      引发ProgressChanged事件      重要事件:    1、DoWork              调用 RunWorkerAsync 时发生    2、ProgressChanged     调用 ReportProgress 时发生    3、RunWorkerCompleted  当后台操作已完成、被取消或引发异常时发生    另外还有三个重要的参数是RunWorkerCompletedEventArgs以及DoWorkEventArgs、ProgressChangedEventArgs。    BackgroundWorker的各属性、方法、事件的调用机制和顺序:    从上图可见在整个生活周期内发生了3次重要的参数传递过程:    参数传递1:此次的参数传递是将RunWorkerAsync(Object)中的Object传递到DoWork事件的DoWorkEventArgs.Argument,由于在这里只有一个参数可以传递,所以在实际应用往封装一个类,将整个实例化的类作为RunWorkerAsync的Object传递到DoWorkEventArgs.Argument;    参数传递2:此次是将程序运行进度传递给ProgressChanged事件,实际使用中往往使用给方法和事件更新进度条或者日志信息;    参数传递3:在DoWork事件结束之前,将后台线程产生的结果数据赋给DoWorkEventArgs.Result一边在RunWorkerCompleted事件中调用RunWorkerCompletedEventArgs.Result属性取得后台线程产生的结果。    另外从上图可以看到DoWork事件是在后台线程中运行的,所以在该事件中不能够操作用户界面的内容,如果需要更新用户界面,可以使用ProgressChanged事件及RunWorkCompleted事件来实现。     明白了BagkgroundWorker的事件调用顺序和参数传递机制之后在使用该组件用于多线程编程的时候就可以轻松许多了。详细的实例可以在我写的天涯离线浏览器中看到。

2010-02-18 0comments 95hotness 0likes mikebai Read all
DotNET

多控件dock设置为fill后 被覆盖处理

控件1.dock   =   DockStyle.Top;   控件2.dock   =   DockStyle.Fill;   容器.controls.add(控件1);   容器.controls.add(控件2);   使用上面的代码会导致控件2填充了整个容器,控件1被覆盖掉而无法显示的情况 处理方法1: 将设置了DockStyle.Fill的控件在最前面添加即 控件1.dock   =   DockStyle.Top;   控件2.dock   =   DockStyle.Fill;   容器.controls.add(控件2);  容器.controls.add(控件1);   处理方法2:在代码的最后添加下面的语句容器.Controls.SetChildIndex(控件2,   0); 注:在.Designer.cs文件中使用方法2 会在调整页面布局时 自动更替为方法1的代码  

2010-02-17 0comments 102hotness 0likes mikebai Read all
DotNET

RegularExpressionValidator控件中常见正则表达式用法

"^\d+$"  //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$"  //正整数 "^((-\d+)|(0+))$"  //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$"  //负整数 "^-?\d+$"    //整数 "^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数 "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数 "^(-?\d+)(\.\d+)?$"  //浮点数 "^[A-Za-z]+$"  //由26个英文字母组成的字符串 "^[A-Z]+$"  //由26个英文字母的大写组成的字符串 "^[a-z]+$"  //由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 "^\w+$"  //由数字、26个英文字母或者下划线组成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url 只能输入1个数字 表达式 ^\d$ 描述 匹配一个数字 匹配的例子 0,1,2,3 不匹配的例子 只能输入n个数字 表达式 ^\d{n}$ 例如^\d{8}$ 描述 匹配8个数字 匹配的例子 12345678,22223334,12344321 不匹配的例子 只能输入至少n个数字 表达式 ^\d{n,}$ 例如^\d{8,}$ 描述 匹配最少n个数字 匹配的例子 12345678,123456789,12344321 不匹配的例子 只能输入m到n个数字 表达式 ^\d{m,n}$ 例如^\d{7,8}$ 描述 匹配m到n个数字 匹配的例子 12345678,1234567 不匹配的例子 123456,123456789 只能输入数字 表达式 ^[0-9]*$ 描述 匹配任意个数字 匹配的例子 12345678,1234567 不匹配的例子 E, 只能输入某个区间数字 表达式 ^[12-15]$ 描述 匹配某个区间的数字 匹配的例子 12,13,14,15 不匹配的例子 只能输入0和非0打头的数字 表达式 ^(0|[1-9][0-9]*)$ 描述 可以为0,第一个数字不能为0,数字中可以有0 匹配的例子 12,10,101,100

2010-02-09 0comments 94hotness 0likes mikebai Read all
DotNET

checkbox控件的enable,disabled,以及与前台js的交互控制

往往有这样的场景,两个checkbox,当checkbox1选中的情况下checkbox2的才可用,checkbox2的这个“可用”在服务端的代码为checkbox2.Enabled=true,而在生成的html代码中为checkbox2.disabled=false。 昨天的工作中我就遇到这样的怪事,安全起见,checkbox2的“不可用”状态是我在后台这样子 checkbox2.Attributes.Add(”disabled”, “true”) 前台的js代码大致如下 if(checkbox1.checked==true) { checkbox2.disabled=false; } else { checkbox2.disabled=true; } 结果我发现我的js代码不起作用,但是并没有页面提示说我的js代码错误,这就奇怪了,为什么正确的代码却不起作用呢,凭经验,马上查看页面源文件,我发现,等我设置了checkbox2.Attributes.Add(”disabled”, “true”)后,生成的checkbox2的html代码大概是这样的<span disabled=”true”><input type=checkbox…..<lable for=”checkbox2″ /></span>哦,这样一下子都明白了,和着它把checkbox外面套了一层<span>啊,而且这个<span>没有ID,好了,明白了原因后就好处理了,解决方法是: if(checkbox1.checked==true) { checkbox2.parentElement.disabled=false; } else { checkbox2.parentElement.disabled=true; } 也就是直接操作checkbox2的父元素就可以了,现在想想M$为什么这么做,为什么在checkbox外套一层<span>,我想大概是这个原因,大家知道<lable>标签只要加上for属性,那么这个标签就和它for的对象关联上了,这样你你在<lable>标签上点击,实际上也是在for的对象是点击,此例中就是这个checkbox,如果你M$仅仅在<checkbox>里加上disabled=true属性,那么只要点了<lable>,还是相当于点了checkbox,明白了,所以M$干脆就来一狠的,直接在<checkbox>和<lable>外套上了个<span>并且设置这个<span>的disabled=true,这样就达到整个checkbox“不可用”的效果了,注意,此时虽然<span> 的属性为disabled=true,但是<checkbox>和<lable>均没有设置此属性,所以我修改过的代码才仅仅需要处理checkbox的parentElement就可以了,于是我又做了一个试验,我在后台这样做 checkbox2.Enabled=Flase 马上,我在生成的html里发现,这次是<span disabled=”disabled”><input type=checkbox disabled=”disabled”>,这次不仅更改了disabled=”true” 变为disabled=”disabled”,而且在span和checkbox里都加上了disabled属性,有了上次的经验,处理这个就比较简单了: if(checkbox1.checked==true) { chckbox2.disabled=”"; checkbox2.parentElement.disabled=”";//注意赋值字符串为空而不是设置一个true } else { chckbox2.disabled=”"; checkbox2.parentElement.disabled=”disabled”; }

2010-02-08 0comments 94hotness 0likes mikebai Read all
DotNET

解决requiredfieldvalidator onclientclick调用冲突问题

文章1:From:http://www.cnblogs.com/firstyi/archive/2006/12/26/604216.html JS scriptfunction ConfirmMe(){   return confirm("Do you want to proceed?");}ASPX<asp:TextBox id="txtName" runat="server"/><asp:Button id="btnSubmit" OnClientClick="return ConfirmMe()" Text="Submit" runat="server"/>Well, that is pretty straightforward. BUT, it goes weird when you have a validator control (eg. RequiredFieldValidator) that is used to validate the "txtName" textbox server control. For instance,<asp:TextBox id="txtName" runat="server"/><asp:RequiredFieldValidator id="rq1" ControlToValidate="txtName" ErrorMessage="Name cannot be blank" Display="Dynamic" runat="server"/><asp:Button id="btnSubmit" OnClientClick="return ConfirmMe()" Text="Submit" runat="server"/>Whenever you press the button with no textbox value, the client-side confirmation dialog will be invoked first before the validator message is able to show up. This isn't what we expected it to behave. I tried several ways to overcome this problem, including using CLIENT CALLBACK, disabling the CauseValidation, but it failed. Finally, I was able to find a solution by adding JUST ONE line in the JS script. function ConfirmMe(){   if(Page_ClientValidate())      return confirm('Do you want to proceed?');       Page_BlockSubmit=false;  //当页面中有其他不需要验证的按钮或下拉框时一定要加上这句话,否则其他下拉框第一次提交时不会触发后台代码   return false;}     文章2:From:http://www.dotblogs.com.tw/puma/archive/2008/03/26/2313.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ButtonConfirm2.aspx.cs" Inherits="ButtonConfirm2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title>未命名頁面</title></head><body>    <form id="form1" runat="server" onsubmit="if (Page_ValidationActive && !confirm('確定送出嗎?')) return false;">    <div>        <

2010-02-01 0comments 97hotness 0likes mikebai Read all
DotNET

使用CustomValidator类及时验证用户名

        做网站用户注册时,都要验证用户名是否已经被注册,现在最常见的做法是点了提交以后再在服务器端检查,这样给用户带来很大不便,如果用户名已经被注册就需要返回重输用户名和密码,这样带来了不必要的回发过程。以前在阿里巴巴注册时发现阿里巴巴在这点上做得很好,他们就是实时检查的。那么我们如何在 .Net 里面实现在这个功能呢。先看一下简单的思路,就是在客户端 Textbox 引发 onchange 事件时使用 XmlHttpRequest 在后台打开一个网页检查反馈结果。来看看简单实现 function Init() {    var userName=document.getElementById("UserName");    userName.onchange=function(){        var oBao = new ActiveXObject("

2010-02-01 0comments 96hotness 0likes mikebai Read all
DotNET

AJAX Control Toolkits初学

A ScriptManager is required on the page to use ASP.NET AJAX Script Components <%--添加AjaxControlToolkit引用--%> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 添加 这个就行了 <form id="Form1" method="post" runat="server">    <asp:ScriptManager ID="ScriptManager1" runat="server">    </asp:ScriptManager> Form:http://www.cnblogs.com/ok519/archive/2009/06/30/1514020.html   關於AJAX Control Toolkits的語言檔 在開發AJAX 網頁時,拉了一個如CalendarExtender控制項時,Visual Studio 2005會自動在將AJAX Control Toolkits的語言檔加入到Bin資料夾。筆者突然有個疑問就是這些資料夾的語言檔案 AjaxControlToolkit.resources.dll 要怎麼使用呢?因為 CalendarExtender 一直顯示英語系內容,所以想辦法改變顯示成中文的日期,經百般的測試後發現只需要修改ScriptManager的屬性 「EnableScriptGlobalization 」及「EnableScriptLocalization」為『True'即可,若你認為有些語系是用不到的其實可以將他刪除的。 From:http://www.dotblogs.com.tw/jameswu/archive/2008/04/23/3074.aspx  

2010-01-21 0comments 91hotness 0likes mikebai Read all
DotNET

从0开始Windows Mobile 开发

我从事Windows Mobile开发半年多了,这半年很努力,收获也很多。对于当初连Windows是基于消息机制都不知道的我来说,起点可以说是0。之所以写这篇文章,是想和大家分享我的经验,能够为那些初学者提供一些儿帮助。未来我工作和学习的重点将放在用户界面和多媒体开发上。欢迎和我交流,我的QQ是:3423 67 776。 言归正传,先来看看微软在操作系统方面的产品,桌面操作系统大体的历程: MS-DOS Windows 1.0 Windows 2.0 Windows 3.0 Windows NT 3.1 Windows 3.2 Windows 95 Windows NT 4.0(发布同一年——1996年,11月份发布Windows CE 1.0) Windows 98 Windows ME Windows 2000 Windows XP Windows Vista Windows 7 关于桌面操作系统发展史有很多有意思的事情,在此略过。(关于以后的文章中我总结一下《Windows Internals》读书笔记。) 嵌入式操作系统有: Windows CE 1.0 Windows CE 2.0 Windows CE 3.0(改名为Windows for Pocket PC,简称Pocket PC) Windows CE 4.0(即Windows CE.Net) Windows CE 5.0(开放250万行源代码) Windows Embedded CE 6.0(2006年11月推出,在内核方面改进了很多,比如内存管理等。并且共享100%内核源码。) 之后微软宣布将Windows Embedded CE与 Windows Embedded Standard、Windows XP Embedded、 Windows Embedded Enterprise、POSReady( next generation of Windows Embedded for Point of Service)、 Windows Embedded NavReady、Windows Embedded Server组成Windows Embedded系列产品。 基于Windows CE操作系统的有: 网络投影仪、网络多媒体设备、车载计算机、电视机顶盒、生产在线的控制设备、公共场所的信息站等等,有些设备甚至没有任何人机界面。微软针对不同嵌入式设备推出不同定制的Windows CE内核,比如我们这里讲的Windows Mobile操作系统,它是专门针对智能手机的,在Windows CE内核基础上添加了智能手机所具有的功能和界面,还比如前段时间我看到微软推出针对MP4的专用操作系统。(关于Windows CE/Windows Mobile内核方面知识在此略过,我会在以后的文章中总结。) 现在让我们看看Windows Mobile操作系统的发展史: Windows Mobile 6.0是基于Windows CE 5.0内核,所以内存管理方面跟Windows CE 5.0是一样的,Windows Mobile 7.0将采用Windows CE 6.0内核。 开发工具(第1、3两项需要向微软购买,如果仅仅是学习第4项你下个试用版就可以了。具体请看这里) 1.Platform Builder for Windows Mobile(注意和Windows CE版本的区别),在定制内核、内核调试(另外可以借助很多PB的插件)等操作中,它将是一个得力的助手。 2.Windows Mobile 6 Professional SDK(或者Standard版本的,这里仅仅提供Professional版本),在安装完Visual Studio之后安装Windows Mobile 6 Professional SDK Refresh.msi,然后安装中文包:Windows Mobile 6 Professional Images (CHS).msi。提供了你开发所需要的基本接口,和调试用的模拟器等。另外其它的头文件和Lib库等文件你可能需要在AKU里面查找。

2009-12-21 0comments 95hotness 0likes mikebai Read all
DotNET

[ASP.NET] Session 详解

阅读本文章之前的准备  阅读本文章前,需要读者对以下知识有所了解。否则,阅读过程中会在相应的内容上遇到不同程度的问题。   懂得ASP/ASP.NET编程   了解ASP/ASP.NET的Session模型   了解ASP.NET Web应用程序模型   了解ASP.NET Web应用程序配置文件Web.config的作用、意义及使用方法   了解Internet Information Services(以下简称IIS)的基本使用方法   了解如何在Microsoft SQL Server中创建一个数据库。Session模型简介  Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,我们会在下面的实验中见到它的实际样子。   这个唯一的SessionID是有很大的实际意义的。当一个用户提交了表单时,浏览器会将用户的SessionID自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionID所对应的用户。试想,如果没有SessionID,当有两个用户同时进行注册时,服务器怎样才能知道到底是哪个用户提交了哪个表单呢。当然,SessionID还有很多其他的作用,我们会在后面提及到。   除了SessionID,在每个Session中还包含很多其他信息。但是对于编写ASP或ASP.NET的程序与来说,最有用的还是可以通过访问ASP/ASP.NET的内置Session对象,为每个用户存储各自的信息。例如我们想了解一下访问我们网站的用户浏览了几个页面,我们可能在用户可能访问到每个的页面中加入: <%If Session("PageViewed") = ""Then Session("PageViewed") = 1Else Session("PageViewed") = Session("PageViewed") + 1End If%>   通过以下这句话可以让用户得知自己浏览了几个页面: <%Response.Write("You have viewed " & Session("PageViewed") & " pages")%>   可能有些有些读者会问:这个看似像是数组的Session(“..”)是哪里来的?需要我定义吗?实际上,这个Session对象是具有ASP解释能力的的WWW服务器的内建对象。也就是说ASP的系统中已经给你定义好了这个对象,你只需要使用就行了。其中Session(“..”)中的..就好像变量名称,Session(“..”)=$$$中的$$$就是变量的值了。你只需要写上句话,在这个用户的每个页面中都可以访问..变量中的值了。   其实ASP一共内建了7个对象,有Session、Application、Cookie、Response、Request、Server等。在其他的服务器端脚本语言如JSP、PHP等中也有其类似的对象,只是叫法或者使用方法上不太一样。 ASP Session的功能的缺陷  目前ASP的开发人员都正在使用Session这一强大的功能,但是在他们使用的过程中却发现了ASP Session有以下缺陷:   进程依赖性:ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。   Session状态使用范围的局限性:刚一个用户从一个网站访问到另外一个网站时,这些Session信息并不会随之迁移过去。例如:新浪网站的WWW服务器可能不止一个,一个用户登录之后要去各个频道浏览,但是每个频道都在不同的服务器上,如果想在这些WWW服务器共享Session信息怎么办呢? Cookie的依赖性:实际上客户端的Session信息是存储与Cookie中的,如果客户端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。鉴于ASP Session的以上缺陷,微软的设计者们在设计开发 ASP.NET Session时进行了相应的改进,完全克服了以上缺陷,使得ASP.NET Session成为了一个更加强大的功能。 Web.config文件简介  有的ASP.NET程序员说:Web.config文件?我从来没有听说过啊,可是我写的程序不是也能很正常的运转吗?是的,你说得没错,没有Web.config文件程序是可以正常运行的。但是,如果你做了一个大型的网站,需要对整个网站做一些整体配置,例如整个网站的页面使用何种语言编写的、网站的安全认证模式、Session信息存储方式等,这时你就需要使用Web.config文件了。虽然Web.config文件中的某些选项是可以通过IIS配置的,但是如果在Web.config中也有相应的设置就会覆盖掉IIS中的配置。而且,Web.config文件的最大的便利之处就是可以在ASP.NET页面中通过调用System.web名字空间访问Web.config中的设置。   Web.config有两种,分别是服务器配置文件和Web应用程序配置文件,他们都名为Web.config。在这个配置文件中会保存当前IIS服务器中网页的使用哪种语言编写的、应用程序安全认证模式、Session信息存储方式的一系列信息。这些信息是使用XML语法保存的,如果想对其编辑,使用文本编辑器就行了。   其中服务器配置文件会对IIS服务器下所有的站点中的所有应用程序起作用。在.NET Framework 1.0中,服务器的Web.config文件是存在:\WinNT\Microsoft.NET\Framework\v1.0.3705中的。   而Web应用程序配置文件Web.config则保存在各个Web应用程序中。例如:当前网站的根目录\Inetpub\wwwroot,而当前的Web应用程序为MyApplication,则Web应用程序根目录就应为:\Inetpub\wwwroot\MyApplication。如果你的网站有且只有一个Web应用程序,一般说来应用程序的根目录就是\Inetpub\wwwroot。如果想添加一个Web应用程序,在IIS中添加一个具有应用程序起始点的虚拟目录就行了。这个目录下的文件及目录将被视为一个Web应用程序。但是,这样通过IIS添加Web应用程序是不会为你生成Web.config文件的。如果想创建一个带有Web.config文件的Web应用程序,需要使用Visual Studio.NET,新建一个Web应用程序项目。   Web应用程序的配置文件Web.config是可选的,可有可无。如果没有,每个Web应用程序会使用服务器的Web.config配置文件。如果有,则会覆盖服务器Web.config配置文件中相应的值。   在ASP.NET中,Web.config修改保存后会自动立刻成效,不用再像ASP中的配置文件修改后需要重新启动Web应用程序才能生效了。 Web.config文件中的Session配置信息  打开某个应用程序的配置文件Web.config后,我们会发现以下这段: <sessionState  mode="InProc"  stateConnectionString="tcpip=127.0.0.1:42424"  sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"  cookieless="false"  timeout="20" />   这一段就是配置应用程序是如何存储Session信息的了。我们以下的各种操作主要是针对这一段配置展开。让我们先看看这一段配置中所包含的内容的意思。sessionState节点的语法是这样的: <sessionState mode="Off|InProc|StateServer|SQL

2009-11-18 0comments 94hotness 0likes mikebai Read all
DotNET

ASP.NET缓存中Cache过期的三种策略

  我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存。 <asp:Button ID="btn_InsertNoExpirationCache" runat="server" Text="插入永不过期缓存"      OnClick="btn_InsertNoExpirationCache_Click" />    <asp:Button ID="btn_InsertAbsoluteExpirationCache" runat="server" Text="插入绝对时间     过期缓存" OnClick="btn_InsertAbsoluteExpirationCache_Click" />    <asp:Button ID="btn_InsertSlidingExpirationCache" runat="server" Text="插入变化时间     过期缓存" OnClick="btn_InsertSlidingExpirationCache_Click" />    三个按钮的Click事件处理方法如下: protected void btn_InsertNoExpirationCache_Click(object sender, EventArgs e)    {        DataSet ds = GetData();        Cache.Insert("Data", ds);    }    protected void btn_InsertAbsoluteExpirationCache_Click(object sender, EventArgs e)    {        DataSet ds = GetData();        Cache.Insert("Data", ds,null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);    }    protected void btn_InsertSlidingExpirationCache_Click(object sender, EventArgs e)    {        DataSet ds = GetData();        Cache.Insert("Data", ds, null, DateTime.MaxValue, TimeSpan.FromSeconds(10));    }    我们来分析一下这三种ASP.NET缓存过期策略。   ◆永不过期。直接赋值缓存的Key和Value即可   ◆绝对时间过期。DateTime.Now.AddSecond

2009-11-18 0comments 96hotness 0likes mikebai Read all
1…89101112…16

Recent Posts

  • c# winform适配高dpi
  • com.microsoft.sqlserver.jdbc.SQLServerException “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server建立安全连接
  • java -cp 用法介绍
  • HTML 容器元素
  • MVC的cshtml的介绍

Recent Comments

No comments to show.

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang