• c#跨线程访问的代码和窗体关闭退出死循环的代码


    一:一段跨线程访问,给页面内的控件赋值的代码找了半天没找到,还得找了以前写的程序.

    在这记下来吧 .  这是其他程序内可以跨线程访问的代码 .

                 if (gridControl1.InvokeRequired)
                    {
                        gridControl1.BeginInvoke(new MethodInvoker(delegate
                        {
                            gridControl1.DataSource = urlmodellist;
                        }));
                    }
                    else
                    {
                        gridControl1.DataSource = urlmodellist;
                    }

    二:这个是关闭创体内的while 循环的bug  ,正常情况下关闭窗体,窗体内有死循环的话,窗体关闭了,程序还在后台运行.

     解决方法:

    1:在窗体的FormClosing事件处理方法中,使用代码System.Environment.Exit(0)强制退出当前进程,这样一来,不管进程下是否还有线程在工作,都会一概结束。

    private void frmCase2_FormClosing(object sender, FormClosingEventArgs e)
    {
    System.Environment.Exit(0);

    2:还有一个事件结束的方式. 这种方式的话如果下边程序刚开始进行中.程序等到程序运行到waitone才能关闭,比如程序刚起来,就运行了时间长的操作,只能等到这操作技术,运行到waitone 的地方,才能运行..

    while (true)
                {
                    Console.WriteLine("do some thing");
                    BrowerUrls();
                    Thread.Sleep(1000);
                    string cont = SendMail.SendMsg(gridView1);
                    SendEmail("浏览数据", cont);
                 ///   Thread.Sleep(_duration);  //此处线程挂起比如一个小时,睡着了......  此处要注销掉 要不下边接收不到信号了...所以导致信号机制无用..... 
               if (exitEvent.WaitOne(_duration))  //waitone 里边加个时间参数  如果没有信号过来,到了时间也会自动进行while循环,很好的满足当前项目的定时执行的需求
    { return; }

    }

    以上用信号事件 顺利的解决窗体关闭,正常退出死循环的问题

  • 相关阅读:
    pzrNB!!!
    biu biu biu
    大笑三声再往下看!
    Selenium之Chrome浏览器的启动
    Selenium IDE脚本录制步骤简介
    Selenium IDE的一些操作
    Selenium IDE编辑区域修改操作学习
    在firefox安装Selenium IDE
    执行Java脚本firefox启动成功,不运行test方法,且提示NullPointerException
    Selenium+Python学习之一
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/9930240.html
Copyright © 2020-2023  润新知