不要在先线程中访问UI,用Invoke调用
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx?pf=true
*****************************************************************************
http://feiyun0112.cnblogs.com/
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx?pf=true
*****************************************************************************
http://feiyun0112.cnblogs.com/
解决方案 »
- LINQ 联合查询datatable 和xml
- C#网页源码下载,用谷歌搜索图片,怎么获取不到图片部分的源码啊?
- c#将网络上的图片读成字节流
- 我在C#中调用DLL的函数,但是报错,“无法加载 DLL”,详细请进来看,谢谢帮助
- c#下有没有vc里TRACE那样的函数?
- Access升级到SQL Server2000的简便方法?
- socket聊天中,怎么传送处理过的字体?
- 请教各位大哥: 为啥设定Timer定时器时不产生一个新的线程,而要到执行Callback时才产生一个线程呢?
- 问一个关于使用 STATE SERVICE 的问题, 标识类为 SERIABLE 的一个难题
- 高手快点救就我!
- 一道关于算法的面试题
- C#如何访问剪切板
{
if (ctl.InvokeRequired)
{
ctl.Invoke(act, args);
}
else
{
act(args);
}
}AlertLib.AlertForm f = new AlertLib.AlertForm();
f.TopMost = true; object[] args = {m.text, m.url, m.name, AlertLib.AlertForm.ShowWay.Fade, 300, 200, 200, 3000, 500}; f.InvokeIfNeeded(f.Show, args); // .InvokeIfNeeded(f.Show());
我用 form.invoke 没问题, 为什么用control.invoke 有问题呢
/// <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();
}
}试试这个看看