主线程读取文本显示文本内容,子线程会更新这个文本,并同步显示
1,类里面写一个委托函数
2,程序load执行方法
方法内容如下
3,子线程去同步调用显示日志的方法
1,类里面写一个委托函数
delegate void SetShowLogCallback(); //定义委托
2,程序load执行方法
private void Form1_Load(object sender, EventArgs e)
{
showSynchLog();
}
方法内容如下
/**
* 显示同步日志内容
* **/
private void showSynchLog() {
TxtUtil txtUtil = new TxtUtil(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + Glob.LOG_NAME);
List<LogTxt> logTxts = txtUtil.readLastLineLogTxt(10);
if (data_log.InvokeRequired)
{ //控件是否跨线程?如果是,则执行括号里代码
SetShowLogCallback setShowLogCallBack = new SetShowLogCallback(showSynchLog);
data_log.Invoke(setShowLogCallBack);
}
else {
data_log.DataSource = logTxts;
}
//设置列名内容居中
data_log.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
data_log.Columns[0].HeaderText = "更新时间";
//设置列宽自动适应
data_log.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
//设置文本只可读
data_log.Columns[0].ReadOnly = true;
//设置文本内容居左
data_log.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
data_log.Columns[1].HeaderText = "更新内容";
//设置列宽自动适应
data_log.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
//设置文本只可读
data_log.Columns[1].ReadOnly = true;
//设置文本内容居左
data_log.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
}
3,子线程去同步调用显示日志的方法
/**
* 书写同步日志
* **/
private void writeSynchLog() {
// 更新结束写同步日志,然后更新同步数据为0方便第二天再同步
TxtUtil txtUtil = new TxtUtil(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + Glob.LOG_NAME);
txtUtil.InsertLine(DateTime.Now.ToString("yyy-MM-dd HH:mm:ss") + "#" + "本次插入" + insertPregnancyingCount + "条在孕孕情," + insertPregnancyendCount + "条终止孕情;更新" + updatePregnancyingCount + "条在孕孕情," + updatePregnancyendCount + "条终止孕情!");
txtUtil.Save();
showSynchLog();
}