• 秋式广告杀手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关,欢迎挑战


  • 相关阅读:
    (转)eclipse使用技巧
    smartupload 上传文件时 把页面编码改成gbk 解决乱码
    引入外部js如何通知页面其编码格式
    OGNL表达式中的#、%和$
    javaweb提示框问题
    理解iOS 8中的Self Sizing Cells和Dynamic Type
    淘宝内部的兼容大屏幕iPhone设计流程
    ReactiveCocoa & MVVM 学习总结一
    ReactiveCocoa & MVVM 学习总结二
    Objective-C GCC Code Block Evaluation C Extension ({…})语法
  • 原文地址:https://www.cnblogs.com/cyq1162/p/2952934.html
Copyright © 2020-2023  润新知