好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

知识点分享

知识点分享

秋式广告杀手V2.5发布:各种涉及知识点分享

经过一个多月,终于发布了秋式广告杀手新版本V2.5了,由于基本上问题很少,所以更新周期就长一些。

这里谈一点这次改动涉及到的内容和知识点:

1: 去掉了最初依赖的Hosts模式,所以对Hosts的增删改代码都去除了。

2: 百度竞价广告的屏蔽,除了原有的百度搜索,增加百度知识页面的广告屏蔽。

3: 增加了一台服务器,提供默认一剑出墙的服务。

4: 针对默认代理功能,经过层层思考,允许软件在不同目录下的时候可以开多个,以监听不同的端口,变成一款多端口代理软件。

下面分享几个升级中,被我记住的知识点:

1:线程的try catch的必要性:

先说下线程异常的危害性:

1:winform程序:线程异常,若未try,会导致软件自动退出。

2:webform程序:线程异常,若未try,会导致应用程序池重启,类似网站重启。

总结:

别太过份相信自己对代码的掌控,只要是线程的代码函数,都加个try保险,我这种层次的都逃不过万一的某种错误,对于软件,真是稳定压倒一切。

2: 软件只能启动单个实例的知识点:

有时候,我们只允许软件启动一个实例,所以我们通常会有这么段通用代码检测:

static class Program

{

        public static System.Threading.Semaphore _mutex;

 

        /// <summary>

        /// 应用程序的主入口点。

        /// </summary>

        [STAThread]

        static void Main()

        {

            _mutex = new System.Threading.Semaphore(1, 1, "adkiller");

            if (_mutex.WaitOne(0, false) == false)

            {

                MessageBox.Show("软件已经启动过了!", "运行提示");

                return;

            }  

 

需要有点变化:这次的升级, 需要变成了在不同的目录允许多开,所以,按逻辑,我写下了这么段代码:

    Process cp = Process.GetCurrentProcess();

            Process[] allPros = Process.GetProcessesByName(cp.ProcessName);

            processCount = allPros.Length;

            if (processCount > 1)

            {

                foreach (Process pro in allPros)

                {

                    if (cp != pro &&  cp.MainModule.FileName == pro.MainModule.FileName)

                    {

                        MessageBox.Show("软件已经启动过了!", "运行提示");

                        return;

                    }

                }

            }  

这里又涉及到两个知识点:

1:调试期的问题:

在调试的时候,默认有个.vshost宿主,导致调试后运行的软件名称为:秋式广告杀手.vshost.exe

我要测试多个不同目录的软件运行,所以在其它目录也运行了软件,问题来了:

调试的进程“秋式广告杀手.vshost.exe”和直接运行的“秋式广告杀手.exe”,是对不上号的。

解决方法:

这时候,只要把:项目-右键属性-调试-启用VS宿主进程的勾去掉就可以了。

2:想当然的错误:

以为Process.GetCurrentProcess()获取出来的当前进程对象,总会和获取进程列表里的同个进程对象一样,所以才有了cp==pro这样的对象比较判断。

实际的错误:

用Process.GetCurrentProcess出来的对象,和循环进程的每一个pro对象都是不等的,所以直接的判断是错误。

网上这样相当然的错误代码有点多:

一开始,我也网上搜了搜,发现好多和我写的相当然的代码一样,网上也有这种用=号判断出错误示例代码,大伙要注意下。

解决方法:

经过本人细心的发现,对于进程,其进程ID是一样的,于是把判断的语句改成:

cp.Id!=pro.Id

通过进程ID来判断是否同一进程。

好了,本节,基本就分享这两个相对被我记住的知识小点。 

软件升级:软件重启运行,系统会自动升级。

软件下载地址: http://www.cyqdata.com/download/article-detail-54271  

另外,那10关挑战题,到现在还没被完全破关,继续大伙继续给力: 开发者基础知识游戏,共10关,欢迎挑战

 

版权声明:本文原创发表于  博客园 ,作者为  路过秋天  本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

 

 

 

分类:  秋式广告杀手

标签:  秋式广告杀手 ,  屏蔽百度竞价广告 ,  屏蔽视频广告

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于知识点分享的详细内容...

  阅读:37次