WinForm 常见问题
跨线程访问 UI 控件问题
使用 InvokeRequired 解决跨线程访问 UI 控件问题
public partial class Form1 : Form
{
/// <summary>
/// 声明委托
/// </summary>
public delegate bool DelLog(string info);
/// <summary>
/// 创建委托对象
/// </summary>
DelLog delLog;
/// <summary>
/// 构造函数
/// </summary>
public Form1()
{
this.InitializeComponent();
// 初始化委托对象
delLog = new DelLog(Log);
}
/// <summary>
/// 调用委托的函数
/// </summary>
/// <param name="info">日志信息</param>
/// <returns>操作是否成功</returns>
public bool Log(string info)
{
// 判断对控件进行方法调用时是否必须调用 Invoke 方法
if (this.InvokeRequired)
{
this.Invoke(delLog, info);
return true;
}
string[] logData = new string[3];
logData[0] = (listViewLog.Items.Count + 1).ToString();
logData[1] = info;
logData[2] = DateTime.Now.ToString();
ListViewItem listViewItem = new ListViewItem(logData);
listViewLog.Items.Add(listViewItem);
return true;
}
}