windows服务

 

public partial class Service1 : ServiceBase
{

System.Threading.Timer recordTimer;
public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
IntialSaveRecord();
}

protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
if (recordTimer != null)
{
recordTimer.Dispose();
}
}

/// <summary>
/// 定时检查,并执行方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
private void IntialSaveRecord()
{
//10000毫秒=10秒
TimerCallback timerCallback = new TimerCallback(CallbackTask);   //加载事件
AutoResetEvent autoEvent = new AutoResetEvent(false);
recordTimer = new System.Threading.Timer(timerCallback, autoEvent, 0, 1800000);//其中参数10000表示延时执行服务的时间间隔,毫秒为单位

或者(定时服务)

System.Timers.Timer t = new System.Timers.Timer();//实例化Timer类,设置间隔时间为1000毫秒; 
t.Elapsed += new System.Timers.ElapsedEventHandler(OrderTimer_Tick);//到时间的时候执行事件; 
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);

t.Interval=1000;

t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;

}
//方法
private void CallbackTask(Object stateInfo)
{
WriteFile.SaveRecord(string.Format(@"dsc当前记录时间:{0},状况:程序运行正常!", DateTime.Now));
}

}

windows服务安装步骤:
1. cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
2. InstallUtil.exe exe的路径
卸载:
InstallUtil.exe /u exe的路径

 
 
----
 
 

MVC之@Html.Raw()用法

 

@Html.Raw() 方法输出带有html标签的字符串,

如:@Html.Raw("<div style='color:red'>输出字符串</div>")

结果:输出字符串 (红色字体的字符串)

使用Razor中的Html.Raw(推荐使用这种方式)

 
Html.ActionLink的用法总结
1、Html.ActionLink("linkText","actionName")

第一个参数:要显示的文本,第二个参数:视图名
例如:<%=Html.ActionLink("跳转到About页面", "About");%> → <a href="/Home/About">跳转到About页面</a>
 
2、Html.ActionLink("linkText","actionName","controlName")
第一个参数:要显示的文本,第二个参数:视图名, 第三个参数:控制器名
例如:<%= Html.ActionLink("跳转到别的controler中", "Index", "Home");%> →<a href="/ Home/Index">跳转到别的controler中</a>
 
3、
Html.ActionLink("linkText","actionName",routeValues)
第一个参数:要显示的文本,第二个参数:视图名, 第三个参数:url中的参数
例如:<%=Html.ActionLink("跳转到About页面", "About", new { id = "1", name = "x" }) %> → <a href="/Home/About/1?name=x">跳转到About页面</a>
 
4、

Html.ActionLink("linkText","actionName",routeValues,htmlAttributes)
第一个参数:要显示的文本,第二个参数:视图名, 第三个参数:url中的参数,第四个参数:设置标签属性
例如:<%=Html.ActionLink("跳转到About页面", "About", new { id = "1", name = "x" }, new { disabled = "disabled",@class = "about"})%>  →
 <a class="about" disabled="disabled" href="/Home/About/1?name=x">跳转到About页面</a>
 
注意:设置标签的class属性时,应在class前加上@,因为class是关键字。
 
 
 
---
 
 

文件流的读写

 

//读文件

public static string ReadFile()
{

string basePath = System.AppDomain.CurrentDomain.BaseDirectory; 
string strTempDir = string.Format("{0}", DateTime.Now.ToString("yyyyMMdd"));
string path3 = Path.Combine(basePath, strTempDir);
FileStream fs = new FileStream(path3, FileMode.Open);
StreamReader sr = new StreamReader(fs,Encoding.UTF8);
string line = sr.ReadLine();//直接读取一行
sr.Close();
fs.Close();
return line;
}

public static string ReadFile(string sUrl)
{

StringBuilder builder = new StringBuilder();
using (FileStream fs = File.Open(sUrl, FileMode.OpenOrCreate))
{
using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
{
builder.Append(sr.ReadToEnd());
}
}
return builder.ToString();
}

//写文件

public static void WriteFile()
{

string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
string strTempDir = string.Format("{0}", DateTime.Now.ToString("yyyyMMdd"));
string path3 = Path.Combine(basePath, strTempDir);
FileStream fs = new FileStream(path3, FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("hello world");
sw.Close();
fs.Close();//这里要注意fs一定要在sw后面关闭,否则会抛异常
}

 
 
----
 
 
 

简单工厂和工厂模式对比

 

一,工厂模式

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。


二,介绍

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

主要解决:主要解决接口选择的问题。

何时使用:我们明确地计划不同条件下创建不同实例时。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

关键代码:创建过程在其子类执行。

应用实例: 
1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 
2、Hibernate 换数据库只需换方言和驱动就可以。

优点: 
1、一个调用者想创建一个对象,只要知道其名称就可以了。 
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 
3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点: 
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

使用场景: 
1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 
2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 
3、设计一个连接服务器的框架,需要三个协议,”POP3”、”IMAP”、”HTTP”,可以把这三个作为产品类,共同实现一个接口。

注意事项: 
作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。


三,简单工厂模式

简单工厂模式包含以下3个角色:

  1. Factory(工厂角色)
  2. Product(抽象产品角色)
  3. ConcreteProduct(具体产品角色)
    //典型的抽象产品类代码
    abstract class Product
    {
        //所有产品类的公共业务方法
        public void MethodSame()
        {
            //公共方法的实现
        }

        //声明抽象业务方法
        public abstract void MethodDiff();
    }

    //典型的具体产品类代码
    class ConcreteProductA : Product
    {
        //实现业务方法
        public override void MethodDiff()
        {
            //业务方法的实现
        }
    }

    class ConcreteProductB : Product
    {
        //实现业务方法
        public override void MethodDiff()
        {
            //业务方法的实现
        }
    }

    class Factory
    {
        //静态工厂方法
        public Product GetProduct(string arg)
        {
            Product product = null;
            if (arg.Equals("A"))
            {
                product = new ConcreteProductA();
                //初始化设置product
            }
            else if (arg.Equals("B"))
            {
                product = new ConcreteProductB();
                //初始化设置product
            }
            return product;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Factory factory = new Factory();
            Product product = factory.GetProduct("A");
            product.MethodDiff();
        }
    }

在简单工厂模式中用于创建实例的方法有时候是静态(static)方法,因此有时候被称为静态工厂方法(Static Factory Method)模式


四,工厂方法模式

使用工厂方法模式改进后的按钮工厂: 

使用工厂方法模式改进后的按钮工厂: 

工厂方法模式:

  1. 不再提供一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成。
  2. 如果出现新的按钮类型,只需要为这种新类型的按钮定义一个具体的工厂类就可以创建该新按钮的实例。

工厂方法模式的定义 
简称为工厂模式(Factory Pattern)。 
又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。 
工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象。 
目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

工厂方法模式包含以下4个角色:

  1. Product(抽象产品)
  2. ConcreteProduct(具体产品)
  3. Factory(抽象工厂)
  4. ConcreteFactory(具体工厂)
    //典型的抽象产品类代码
    abstract class Product
    {
        //所有产品类的公共业务方法
        public void MethodSame()
        {
            //公共方法的实现
        }

        //声明抽象业务方法
        public abstract void MethodDiff();
    }

    //典型的具体产品类代码
    class ConcreteProductA : Product
    {
        //实现业务方法
        public override void MethodDiff()
        {
            //业务方法的实现
        }
    }

    class ConcreteProductB : Product
    {
        //实现业务方法
        public override void MethodDiff()
        {
            //业务方法的实现
        }
    }

    //典型的抽象工厂类代码
    interface Factory
    {
        Product FactoryMethod();
    }

    //典型的具体工厂类代码
    class ConcreteAFactory : Factory
    {
        public Product FactoryMethod()
        {
            return new ConcreteProductA();
        }
    }

    class ConcreteBFactory : Factory
    {
        public Product FactoryMethod()
        {
            return new ConcreteProductB();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Factory factory = new ConcreteAFactory();
            Product product = factory.FactoryMethod();
            product.MethodDiff();
        }
    }
 

windows服务 MVC之@Html.Raw()用法 文件流的读写 简单工厂和工厂模式对比的更多相关文章

  1. Windows服务注册(需要指定config文件的情况下)

    最近,遇到一个问题:需要将telegraf在Win平台下注册为windows服务(避免误操作关闭CMD窗口): 尝试了网上的几种注册Windows服务的方法,发现无法将telegraf这种需要在CMD ...

  2. C# 使用文件流来读写ini文件

    背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI封装的help类,用起来倒也顺手. ...

  3. C#文件流的读写

    1.文件流写入的一般步骤 1.定义一个写文件流 2.定义一个要写入的字符串 3.完成字符串转byte数组 4.把字节数组写入指定路径的文件 5.关闭文件流 2.文件流读入的一般步骤 1.定义一个读文件 ...

  4. c#中文件流的读写

    文件流读入:第一static void Main(string[] args) { //C#文件流写文件,默认追加FileMode.Append string msg = "okffffff ...

  5. node.js 从文件流中读写数据及管道流

    读取数据 // 引入 fs 模块 const fs = require('fs'); // 创建可读流 let readStream = fs.createReadStream('index.txt' ...

  6. C# windows服务:如何获取服务程序所在的文件夹

    AppDomain.CurrentDomain.BaseDirectory 就这么一句话

  7. 移动文件流的读写指针---fseek

    函数原型:int fseek(FILE *stream,long offset,int origin) stream:文件指针, offset:偏移量,正数表示正向偏移,负数表示负向偏移.origin ...

  8. RDIFramework.NET框架SOA解(集Windows服务、WinForm形式和IIS发布形式)-分布式应用程序

    RDIFramework.NET框架SOA解决方式(集Windows服务.WinForm形式与IIS形式公布)-分布式应用 RDIFramework.NET,基于.NET的高速信息化系统开发.整合框架 ...

  9. 玩转Windows服务系列——使用Boost.Application快速构建Windows服务

    玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...

随机推荐

  1. 【MySQL】可重复读模式下 unique key失效案例

    一 [背景]   今天上午文能提笔安天下,武能上马定乾坤的登博给团队出了一道题目,谁先复现问题,奖励星巴克一杯.激起了一群忙碌的屌丝DBA的极大热情.问题是这样滴,如下图登博提示了几个细节:   1. ...

  2. 服务不支持 chkconfig 的解决方法

    “服务不支持 chkconfig”: 请注意检查脚本的前面,是否有完整的两行:#chkconfig: 2345 80 90    #description:auto_run 在脚本前面这两行是不能少的 ...

  3. Spring 常见错误解决方案记录

    错误提示: 严重: Servlet.service() for servlet [datasync.controller.manager.SettingServlet] in context with ...

  4. Java-字符转比较

    实用的字符串比较方法 package com.tj; public class MyClass implements Cloneable { public static void main(Strin ...

  5. 【02】markdown在线编辑器

    [01]在线编辑器 https://www.zybuluo.com/mdeditor 在线 Markdown 编辑阅读器 pen - 是一个Markdown编辑器工具.demo 你可以试试这个在线的m ...

  6. openscad 3Dmodels 笔记

    参考链接 官方文档 官方文档之--代码 如何快速上手 打开openSCAD后界面如下: 选择其中的examples,从basic看起.配合官方文档中的first step部分,和官方文档--代码写法即 ...

  7. 九度oj 题目1111:单词替换

    题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符 ...

  8. 总结搭建Oracle11g DG踩的坑

    此次的操作环境是Oracle11g 单实例,os为Linux,采用duplicate在线创建物理备库 primary上设置相关参数 ALTER SYSTEM SET LOG_ARCHIVE_CONFI ...

  9. C/C++ 命令行参数的实现方法

    解析从命令行提供的参数可以使用 getopt函数. To use this facility, your program must include the header file unistd.h u ...

  10. 【bzoj1854】[Scoi2010]游戏 - 并查集

    lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...