博文
C# WebBrowser 编程 使用mshtml读取网页内容(2010-06-25 17:00:00)
摘要:首先需要引用Microsoft.mshtml,AxInterop.SHDocVw
一些方法:
webBrowser.ScriptErrorsSuppressed = true;//允许脚本调试
webBrowser.WebBrowserShortcutsEnabled = true;//允许快捷键
/*********************一些事件的处理*******************/
webBrowser.CanGoForwardChanged += new EventHandler(webBrowser_CanGoForwardChanged);
webBrowser.CanGoBackChanged += new EventHandler(webBrowser_CanGoBackChanged);
webBrowser.StatusTextChanged += new EventHandler(webBrowser1_StatusTextChanged);
webBrowser.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
webBrowser.Navigated += new WebBrowserNavigatedEventHandler(webBrowser1_Navigated);
webBrowser.DocumentTitleChanged += new EventHandler(webBrowser1_DocumentTitleChanged);
webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
webBrowser.Disposed += new EventHandler(webBrowser1_Disposed);
(webBrowser.ActiveXInstance as SHDocVw.WebBrowser).NewW......
Remoting模式下的通讯(2008-10-17 22:21:00)
摘要: 使用C#下的Remoting有一段时间了,感觉开始的时候理解比较困难,不过了解了其工作模式后也相对觉得容易多了,现在将一些心得体会记录一下。
Remoting原理:Remoting实际上就是在服务器与客户端之间利用一个对象(RemoteObject)进行通讯,服务器端产生这个对象,客户端远程获取这个对象并利用对象的属性和方法操作服务器端的数据。Remoting的通讯协议可以是IPC、HTTP或者TCP。从性能上讲,IPC信道的通讯性能最佳,但客户端服务器端只能存在于同一个域中;HTTP性能最差,但是HTTP协议几乎能穿越所有的防火墙,所以在远程访问中使用HTTP的情况较多;TCP性能介于前两者之间。
Remoting模式的通讯省去了编写大量通讯协议的过程,将数据与方法用面向对象的方式进行的封装,大大加快了开发进度。
下面,将举例开发一对简单的Remoting通讯的例子程序。
第一步:创建公共对象类(CommProxyClass),公共对象类必须继承于MarshalByRefObject;
public class CommProxyClass:MarshalByRefObject{};
第二步:为这个公共对象添加一个方法:
public int GetProcessCount()
{
......
在c#中利用keep-alive处理socket网络异常断开的方法(2008-10-08 16:52:00)
摘要:本文摘自
http://www.z6688.com/info/57987-1.htm
最近我负责一个IM项目的开发,服务端和客户端采用TCP协议连接。服务端采用C#开发,客户端采用Delphi开发。在服务端开发中我碰到了各种各样的网络异常断开现象。在处理这些异常的时候有了一些心得,现在写出来和大家分享一下。
那网络异常断开原因主要有那些呢?归纳起来主要有以下两种:
1、客户端程序异常。
对于这种情况,我们很好处理,因为客户端程序异常退出会在服务端引发ConnectionReset的Socket异常(就是WinSock2中的10054异常)。只要在服务端处理这个异常就可以了。
2、网络链路异常。
如:网线拔出、交换机掉电、客户端机器掉电。当出现这些情况的时候服务端不会出现任何异常。这样的话上面的代码就不能处理这种情况了。对于这种情况在MSDN里面是这样处理的,我在这里贴出MSDN的原文:
如果您需要确定连接的当前状态,请进行非阻止、零字节的 Send 调用。如果该调用成功返回或引发 WAEWOULDBLOCK 错误代码 (10035),则该套接字仍然处于连接状态;否则,该套接字不再处于连接状态。
但是我在实际应用中发现,MSDN说的这种处理方法在很多时候根本无效,无法检测出网络已经异常断开了。那我们该怎么办呢?
我们知道,TCP有一个连接检测机制,就是如果在指定的时间内(一般为2个小时)没有数据传送,会给对端发送一个Keep-Alive数据报,使用的序列号是曾经发出的最后一个报文的最后一个字节的序列号,对端如果收到这个数据,回送一个TCP的ACK,确认这个字节已经收到,这样就知道此连接没有被断开。如果一段时间没有收到对方的响应,会进行重试,重试几次后,向对端发一个reset,然后将连接断掉。
在Windows中,第一次探测是在最后一次数据发送的两个小时,然后每隔1秒探测一次,一共探测5次,如果5次都没有收到回应的话,就会断开这个连接。但两个小时对于我们的项目来说显然太长了。我们必须缩短这个时间。那么我们该如何做呢?我要利用Socket类的IOControl()函数。我们来看看这个函数能干些什么:
使用 IOControlCode 枚举指定控制代码,为 Socket 设置低级操作模式。
命名空间:Syste......
MSSQL占用内存过大的解决方法(2008-10-08 16:47:00)
摘要:本文摘自:
http://www.cnblogs.com/tomcat112906/archive/2008/09/29/1301842.html
经常使用mssql(WINDOWS平台上强大的数据库平台)的朋友都会发现一个小小的网站在运行若干天后mssql(WINDOWS平台上强大的数据库平台)就会把服务器上所有的内存都吃光,此时你不得不重新启动一下服务器或mssql(WINDOWS平台上强大的数据库平台)来释放内存,有人认为是mssql(WINDOWS平台上强大的数据库平台)有内存泄露问题,其实不然,微软给我们了明确说明:
Quote:
概要
在您启动 sql server(WINDOWS平台上强大的数据库平台) 之后,sql server(WINDOWS平台上强大的数据库平台) 内存使用量将会持续稳定上升,即使当服务器上活动很少时也不会下降。另外,任务管理器和性能监视器将显示计算机上可用的物理内存稳定下降,直到可用内存降到 4 至 10 MB 为止。
仅仅出现这种状态不表示内存泄漏。此行为是正常的,并且是 sql server(WINDOWS平台上强大的数据库平台) 缓冲池的预期行为。
默认情况下,sql server(WINDOWS平台上强大的数据库平台) 根据操作系统报告的物理内存加载动态增大和收缩其缓冲池(缓存)的大小。只要有足够的内存可用于防止内存页面交换(在 4 至 10 MB 之间),sql server(WINDOWS平台上强大的数据库平台) 缓冲池就会继续增大。像在与 sql server(WINDOWS平台上强大的数据库平台) 分配内存位于相同计算机上的其他进程一样,sql server(WINDOWS平台上强大的数据库平台) 缓冲区管理器将在需要的时候释放内存。sql server(WINDOWS平台上强大的数据库平台) 每秒可以释放和获取几兆字节的内存,从而使它可以快速适应内存分配变化。
更多信息
您可以通过服务器内存最小值和服务器内存最大值配置选项设置 sql server(WINDOWS平台上强大的数据库平台) 数据库引擎使用的内存(缓冲池)量的上下限。在设置服务器内存最小值和服务器内存最大值选项之前,请查阅以下 Microsoft 知识库文章中标题为'内存'一节中的参考信......
(转)在IIS7下配置ASP.NET v1.1 (VS2003)(2008-07-08 19:48:00)
摘要:文章转自http://www.cublog.cn/u/884/showart.php?id=261667
原文地址:http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/how-to-setup-asp-net-v1-1-visual-studio-net-2003-projects-on-iis7-vista.aspx
如果你不大熟悉 IIS 7.0 的配置, 要想让 ASP.NET 1.1 在 IIS 7.0 上正常运行应该是很难的. 安装VS.NET2003时你将会得到以下的一些错误:
Microsoft Development Environment
Error while trying to run project: Unable to start debugging on the web server. Could not start ASP.NET or ATL Server debugging.
Verify that ASP.NET or ATL Server is correctly installed on the server.
Microsoft Developement Environment
Error while trying to run project: Unable to start debugging on the web server. You do not have permissions to debug the server.
Verify that you are a member of the "Debugger Users" group on the server.
ASP.NET Version Mismatch
Visual Studio .NET has detected that the Web server is running ASP.NET version 1.0. The Web application you are creating or opening can be configured......
Hashtable 的多线程自同步测试(2008-03-03 22:14:00)
摘要:以前多线程使用Hashtable的时候,都是使用lock(Hashtable)的方式进行同步,那天在网上忽然查到一个资料,就是Hashtable 对于多线程是安全的,可以实现自同步,也就是不需要lock也能实现同步,于是写了段代码测试:
private Hashtable mObjectHash = null;//定义一个哈希表
private int mMaxCount = 50000;//定义最大对象数
///定义的测试对象类
private class mShowObject
{
public int ID=-1;
public String Name;
public override string ToString()
{ return String.Format("{0}\t{1}", this.ID, this.Name); } } ///定义的一些变量,用于计数 long threadAccess = 0; int deleteObjectcount = 0;
int addobjectCount = 0;
int editobjectcount = 0;
DateTime startTime = DateTime.Now;//启动时间
bool mActive = false;
int mChangeThreadCount = 0;
Random rnd = null;
//构造函数
public Form1()
{
InitializeComponent();
mObjectHash = Hashtable.Synchronized(new Hashtable(mMaxCount));//初始化一个具有自同步属性的哈希表
rnd = new Random((int)DateTime.Now.Ticks);
}
private void AddObject(mShowObject obj)
{
if (obj == null) return;
lock (mObjectHash)
{
%%%% if (mObjectHash.ContainsKey(obj......
C# 在listview中添加进度条(2007-11-05 22:16:00)
摘要:今天写了一个可以显示进度条的ListView控件,代码如下:
/// <summary>
/// ListViewEx 的摘要说明。
/// </summary>
public class ListViewEx : System.Windows.Forms.ListView
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private String mProgressColumnText = String.Empty;
/// <summary>
/// 需要设置为进度条的列标头文字,根据这些文字判断所在列是否为进度条显示列
/// </summary>
private String ProgressColumnText
{
get
{
return mProgressColumnText;
}
set
{
mProgressColumnText = value;
}
}
private Color mProgressColor = Color.Red;
public Color ProgressColor
&n......
C#做媒体播放器(2007-10-31 11:51:00)
摘要:
参考网上一些类似代码写的,写的比较仓促,没有做较好的完善,以后再搞了!
下载地址: http://upload.programfan.com/upfile/200710311146704.rar
......
C#下用GDI绘制城墙线波浪线等线型(2007-10-31 11:37:00)
摘要:调用的API:
[DllImport("gdi32.dll", EntryPoint="LineDDA")]
public static extern int LineDDA (
int nXStart, // 线条起点的X坐标
int nYStart, // 线条起点的Y坐标
int nXEnd, // 线条终点的X坐标
int nYEnd, // 线条终点的Y坐标
LineDDAProcHandle lpLineDDAProc,
IntPtr lParam
);
public delegate void LineDDAProcHandle(
int X, // 被求值点的X坐标
int Y, // 被求值点的Y坐标
ref DrawStruct lpData );
private void LineDDAProc(
&......
2种通过经纬度坐标计算距离的方法(2007-10-31 11:26:00)
摘要:2种方法都是在网上搜索来的,一种原来是java写的,一种是.net写的,java的那个我翻译成.net的了.
1:原JAVA
double distanceByLnglat(double _Longitude1,
double _Latidute1,
double _Longitude2,
double _Latidute2)
{
double radLat1 = _Latidute1 * Math.PI / 180;
double radLat2 = _Latidute2 * Math.PI / 180;
double a = radLat1 - radLat2;
double b = _Longitude1 * Math.PI / 180 - _Longitude2 * Math.PI / 180;
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));
s = s * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)
s = Math.Round(s * 10000) / 10000;
return s;
}
2:原.Net
public struct EarthPoint
{
public const double Ea = 6378137;......