读书人

线程中show 窗口的有关问题

发布时间: 2013-10-19 20:58:23 作者: rapoo

线程中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线程来操作。

读书人网 >C#

热点推荐