zoukankan      html  css  js  c++  java
  • 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; }

    }

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

  • 相关阅读:
    嵊州D1T2 圣女
    嵊州D1T1 总统先生,一路走好!
    第三节暑期信息奥赛课——图论
    并查集小结
    洛谷P1003 铺地毯 noip2011提高组day1T1
    洛谷p1216 IOI1994 Day1T1
    Title
    Title
    Title
    Title
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/9930240.html
Copyright © 2011-2022 走看看