首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

线程中show 窗口的有关问题

2013-10-19 
线程中show 窗口的问题while (ServerRun){try{using (HttpWebResponse response HttpWeb.HttpWebRespons

线程中show 窗口的问题



  while (ServerRun)
            {
                try
                {
                    using (HttpWebResponse response = HttpWeb.HttpWebResponseUtility.CreatePostHttpResponse(url, para2, cookie))
                    {
                        if (response != null && response.StatusCode == HttpStatusCode.OK)
                        {
                            string result = HttpWeb.HttpWebResponseUtility.GetData(response, Encoding.UTF8);
  AlertLib.AlertForm f = new AlertLib.AlertForm();
                                        f.Show(result , "提示", AlertLib.AlertForm.ShowWay.Fade, 300, 200, 200, 3000, 500);
                         
                        }                     
                    }
                }
                catch (System.Exception ex)
                {
                   
                }
                Thread.Sleep(10000);
                Application.DoEvents(); 
              
                //GC.Collect();
            }


现在碰到2个问题 
1. 窗口老是处于 未响应状态
2. show出来的窗口不能处于桌面的最顶端

请问怎么解决
[解决办法]
不要在先线程中访问UI,用Invoke调用
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx?pf=true
  
*****************************************************************************
http://feiyun0112.cnblogs.com/
[解决办法]
某个窗体或控件.Invoke(new Action(() => f.Show(result , "提示", AlertLib.AlertForm.ShowWay.Fade, 300, 200, 200, 3000, 500));
[解决办法]

    /// <summary>
    /// 替代使用InvokeRequired
    /// </summary>
    static class ControlExtensions
    {
        public delegate void ActionShow();
        /// <summary>
        /// 从worker thread 调用UI Thread的控件的方法
        /// </summary>
        /// <param name="control"></param>
        /// <param name="code"></param>
        static public void UIThread(this Control control, ActionShow code)
        {
            if (control.InvokeRequired)
            {


                control.BeginInvoke(code);
                return;
            }
            code.Invoke();
        }
    }


试试这个看看
[解决办法]
线程间安全操作UI的前提是,对UI元素的操作都委托主线程,也就是UI线程来操作。

热点排行