晴空万里
百度空间 | 百度首页 
 
关于我
 

   
 
好友最新文章
 
     
 
最新动态
 
   
 
我的爱好
 
我的偶像
毛泽东等
喜欢的书
文学类书籍
喜欢的音乐
民乐
喜欢的电影
有史料价值的电影
喜欢的运动
篮球乒乓求
其他兴趣爱好
想学好英语
   
 
我在百度
 
   
 
滚动新闻图片
 
   
 
我的资料
 
没有透露详细资料。
   
 
个人档案
 
zhao_e893

上次登录:
6天前
加为好友
 
   
 
订阅我的空间
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     
 
 
文章列表
 
2009-09-11 12:21

System.Xml.XmlWriter r = System.Xml.XmlWriter.Create("c:\a.xml");

1先创建元素

2必须先写属性

3在写value

2和3不能倒

 
2009-09-08 15:22

1、使用内存映射文件

System.IO.FileStream file = new System.IO.FileStream(@"C:\Temp\MyFile.dat", System.IO.FileMode.Open);
System.IO.MemoryMappedFiles.MemoryMappedFile mmf = System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(file);
System.IO.MemoryMappedFiles.MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
byte[] buffer = new byte[10];
for (int index = 0; index < buffer.Length; index++)
{
buffer[index] = accessor.ReadByte(index);
}

2、共享内存
调用windos api

以下是使用WCF
3、使用SendMessage向另一进程发送WM_COPYDATA消息
4、使用消息队列
5、使用WebService、.NET Remoting
6、使用NamedPipe
 
2009-09-08 12:10
//Component Object Model,组件对象模型
using System.IO.Ports;
using System.Threading;
using System;
using System.Text;
class MySerialPort
{
string txtSendStr = "txtSend.Text";
string txtReceiveStr = "";
private void CallMethod()
{
SerialPort serialPort = new SerialPort();
serialPort.PortName = "COM1 ";//端口名
serialPort.BaudRate = 19200;//波特率
serialPort.Parity = Parity.Odd;
serialPort.StopBits = StopBits.Two;

serialPort.Open();

//发送数据
serialPort.Write(txtSendStr);
//或者,发送二进制数据
//byte[] bytesSend = Encoding.Default.GetBytes(txtSendStr);
//serialPort.Write(bytesSend, 0, bytesSend.Length);

//接收
Thread threadReceive = new Thread(new ParameterizedThreadStart(SynReceiveData));
threadReceive.Start(serialPort);
//或者
//Thread   threadReceiveSub   =   new   Thread(new   ParameterizedThreadStart(AsyReceiveData));
//threadReceiveSub.Start(serialPort);
}

//同步阻塞读取
private void SynReceiveData(object serialPortobj)
{
SerialPort serialPort = (SerialPort)serialPortobj;
Thread.Sleep(0);
serialPort.ReadTimeout = 1000;

//阻塞到读取数据或超时(这里为2秒)
byte firstByte = Convert.ToByte(serialPort.ReadByte());
int bytesRead = serialPort.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(serialPort.ReadByte());
txtReceiveStr = System.Text.Encoding.Default.GetString(bytesData);

serialPort.Close();
}

//异步读取
private void AsyReceiveData(object serialPortobj)
{
SerialPort serialPort = (SerialPort)serialPortobj;
Thread.Sleep(500);
txtReceiveStr = serialPort.ReadExisting();
serialPort.Close();
}

}
 
2009-09-08 11:20
TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP,udp等
TCP协议是需要握手的,像两个人打电话一样,需要主机名和端口
UDP协议不用,像广播一样

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace ProWin
{
class MyTCPIPClass
{

//客户端代码
public void myTcpClient()
{
TcpClient client = new TcpClient("127.0.0.1", 13);
NetworkStream ns = client.GetStream();
byte[] bytes = new byte[1024];
int bytesRead = ns.Read(bytes, 0, bytes.Length);

string reStr = Encoding.ASCII.GetString(bytes, 0, bytesRead);
client.Close();
}

//服务器端代码
public void myTcpServer()
{
string hostname = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = Dns.GetHostEntry(hostname);
IPAddress ip = ipEntry.AddressList[0];
TcpListener listener = new TcpListener(IPAddress.Any, 13);
listener.Start();

bool done = false;
while (!done)
{
TcpClient client = listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
try
{
ns.Write(byteTime, 0, byteTime.Length);
ns.Close();
client.Close();
}
catch (Exception e)
{
//处理异常
}
}
listener.Stop();
}

}
}
 
2009-08-17 17:21

1.      系统需求
Win2000 以上操作系统,VS.NET 2003 必须被安裝
2.      相关工具说明

Nunit
单元测试的一个比较优秀的工具。
http://www.nunit.org/
Visual Source Safe
版本控制工具。

http://www.microsoft.com/vstudio


CruiseControl.NET
项目监控工具。

http://ccnet.thoughtworks.com

Final Builder
一个集版本控制,编译,单元测试,流程控制等一体非常强大的构建工具。
3.      总框图
说明:
       CC.Net 监控VSS里的变化,如果发现有变化,CC.Net立即调出Final Builder将最新改动的VSS里的数据拷贝到本地并且进行编译,将结果输出.生成DLL程序集或者EXE可执行文件, Final Builder将得到的将要执行单元测试的程序集DLL文件交给NUnit检测(NUnit已集成到Final Builder的内,NUnit测试后的返回信息也会被Final Builder所得到。),不管成功失败可以多种形式通知开发人员,以上所有操作只要是包含在框图(Final Builder)内部的,执行后的所有信息都会被Final Builder所得到,并以写Log的形式记录下来。


4.      安装部署Daily Build
首先安装上面所列出来的所有软件。

4.1.   建立VSS服务器
打开Visual Studio 2003, 新建一个类库项目,名称为ClassLibrary1, 使之生成Bank.dll程序集。
代码如下:

using System;

namespace ClassLibrary1

{

     /// <summary>

     /// Class1 的摘要说明。

     /// </summary>

     public class Class1

     {

         public static string Message()

         {

              return "您好啊!";

         }

     }

}

4.2.   建立VSS服务器
直接在解决方案管理器中选择该解决方案右击鼠标,选择 将解决方案添加到代码管理器 既可。

4.3.   配置Final Builder
4.3.1        建立新的FB项目

首先我们建立一个新的工程,存储位置为F:\FBProject,项目名为MyTest。

4.3.2        添加一个时间戳

在左边工具栏中开打Misc选择Get Date/Time 做以下设置:


              说明:红色所框起的部分需要手动设置

              1.选择当前时间。

              2.日期格式为:yyyymmddhhmmss

              3.选择存放这个时间的变量 我们在这里添加一个变量叫做StartTime


4.3.3        下载VSS服务器的最新版本

请先设置好VSS的一些参数。选择菜单 tools->Options 出现对话框 Final Builder Options 选择左边工具栏 Version Control Systems->Visual source safe


              说明:红色所框起的部分需要手动设置

1. Source Safe Ini File:需要在VSS Data Base所在的目录中的srcsafe.ini文件的路径。

2. Project:VSS服务器上的项目路径。

3. Working Folder:本地工作目录。

4. User ID:登录VSS的账号。

5. Password:登录VSS的密码。

然后需要做的就是添加一个下载最新版本的任务了。

在左边工具栏中开打Source Safe选择VSS Get Last Version 做以下设置:


说明:红色框中是您已经在上一部中设置的一些参数,您在这里只需要确认下就可以了,但一定要记住要选择Recursive和Build Tree(递归下载这个目录下的所有文件)。


4.3.4        编译本地文件

请先设置好.net的一些参数。选择菜单 tools->Options 出现对话框 Final Builder Options 选择左边工具栏 Compilers-> Visual Studio .NET


说明:这里只有VS2002和VS2003的选择,在更高的版本中还添加了VS2005以及VSTS一系列微软的工具。

然后需要做的就是添加一个编译最新版本的任务了。

在左边工具栏中开打Compilers选择Visual Studio .NET 做以下设置:


说明:在这里你最主要的需要指定你刚才在VSS服务器上下载到本地工作目录里的工程的解决方案。当然如果你只需要编译这个解决方案中的部分项目,你也可以在蓝色框中自定义你的选择。

4.3.5        单元测试

请先设置好NUnit的一写属性参数选择菜单 tools->Options 出现对话框 Final Builder Options 选择左边工具栏 Other-> NUnit,选择好nunit-console.exe的路径既可。

然后需要做的就是添加一个测试刚才编译好的程序集的任务了。

在左边工具栏中开打Testing Tools选择NUnit 选择需要测试的程序集,或者原先做好的测试项目就可以了。

4.3.6        添加一个时间戳

方法同4.3.2 只是把存放这个时间的变量名改为EndTime。

4.3.7        写Log

在Final builder中写LOG相当简单,当然LOG里对于您这次编译所得到的信息记录也相当完整。

在左边工具栏中开打Misc选择Export Log File,选择要导出的位置就可以了。


说明: Output File中的文件路径用%%这个所包含的刚才我们在写时间戳时候存放时间的变量,那么这里的文件全路径就是 F:\LOG\FinalBuilderLog 开始执行任务时间-任务结束时间.html

4.3.8        发送Email

在左边工具栏中开打Internet选择Send Email(SMTP) 做以下设置:


              说明:    Host为发送服务器的地址

                            下面是用来发送邮件的帐号和密码


              说明:    From表示以谁的名义,邮箱来发送。


              说明:    Subject    邮件标题

                            Body       内容


说明:    这里特别注意附件的路径,我们在这里也是采用同4.3.7中导出LOG相同的路径。


说明:添加邮件列表,如果需要发送请记得把最后一项的Enabled设为Yes,然后点OK就可以了。

4.4. 配置CC.Net
在这里我们使用的CC.Net的最新版本1.0.1.1277,直接安装,并且在桌面和开始菜单中都有快捷方式。

首先,我们需要做的是配置CC.Net的XML文件。

              打开   开始->所有程序->CruiseControl.NET->CruiseControl.NET Config

配置方法如下:(使用时请删除里面/**/所包含的文字,CC.Net不能识别中文)

<cruisecontrol>

<project name="ttcre2">

    <webURL>http://172.20.16.178:98/</webURL>

<schedule type="schedule" sleepSeconds="60"/>

/*

设置VSS服务器的一些参数,在这里我们把VSS服务器放在了IP地址为172.20.16.178的服务器上

ssdir 为VSS的数据库存放的文件夹

executable 为VSS的执行程序

project 表示VSS中的项目节点

workingDirectory 本地工作文件夹

autoGetSource 当VSS发生改变时,是否自动下载最新的版本(因我们在Final builder里面实现了下载最新版本,所以这里我们选择false)

*/
    <sourcecontrol type="vss">

       <ssdir>\\172.20.16.178\vss8.0</ssdir>

      <executable>D:\Program Files\Microsoft Visual SourceSafe\ss.exe</executable>

       <project>$/ClassLibrary1.root/ClassLibrary1</project>

      <workingDirectory>F:\Visual Studio Projects</workingDirectory>

      <autoGetSource>false</autoGetSource>

</sourcecontrol>

/*
当VSS中版本发生变化的时候需要做的工作
*/
     <tasks>
         <exec>
              <executable>..\WorkingDirectory\MyTest.bat</executable>
         </exec>
     </tasks>
     /* 写Log */
    <publishers>
      <xmllogger>
        <logDir>..\OAFlow_log\</logDir>
      </xmllogger>
</publishers>

/* 当获得VSS服务器已经有改动时候延迟执行tasks中的任务(到时间后会再到VSS上取得一下最新版本,如有改动再次等待,一直到设置的时间内无改动为止,执行tasks中的任务。) */

    <modificationDelaySeconds>100</modificationDelaySeconds>

</project>

</cruisecontrol>


大家一定看到了我的tasks中执行的MyTest.bat了,其实他就是执行一个命令行指令,当然,如果你Final Builder有多个项目,也可以执行多个指令。

内容如下:

"D:\Program Files\FinalBuilder2\FinalBuilder2.exe" /n /r /e "F:\FBProject\MyTest.fbz2"

说明:第一个引号中是Final Builder的执行程序

             第二个引号是我们在4.3.1中创建的Final Builder工程。


5.      小结
本文从Daily Build的好处讲到相关软件的配置及最后生成结果的文件。整体看来,Daily Build的确是项目便捷,快速,稳定开发的利器。工欲善其事,必先利其器,希望本文能对那些为项目的bug调试搞得焦头烂额的项目经理们起到抛砖引玉的作用。

 
2009-07-28 12:26

如果有了pictureBox时,将label透明,代码如下


        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {

            foreach (Control C in this.Controls)
            {
                if (C is Label)
                {
                    Label L = (Label)C;
                    L.Visible = false;
                    e.Graphics.DrawString(L.Text, L.Font, new SolidBrush(L.ForeColor), L.Left - pictureBox1.Left, L.Top - pictureBox1.Top);
                }
            }

        }

 
2009-07-17 16:49

                        string[] arr = new string[5];
                        string s = string.Join("", arr);
 
2009-07-17 08:52

1、系统启动时,报错如下:


“World Wide Web Publishing 服务在请求配置数据库更改通知时遇到问题。数据域包含错误号。”

或者

“World Wide Web Publishing Service 服务因 2147500034 (0x80004002) 服务性错误而停止。”

2、解决办法:

在开始菜单,运行:regsvr32 c:\windows\system32\oleaut32.dll

3、说明:

oleaut32.dll是对象链接与嵌入OLE相关文件。

 
2009-07-16 16:57

Hashtable table = new Hashtable();


            ICollection collTable = table.Keys;
            foreach (string key in collTable)
            {
                object value = table[key];
            }

 
2009-07-14 15:03
无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。.
 
     
 
 
影响力
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
在线用户
 
   
 
我的好友
 
   


©2009 Baidu