主线程读取文本显示文本内容,子线程会更新这个文本,并同步显示
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();
}
分享到:
相关推荐
由于Windows窗体控件本质上不是线程安全的。... 这种方法我没用过,因为大家推荐不要使用,所以我没去实验过,具体方法如下(摘自网上): 设置System.Windows.Forms.Control.CheckForIllegalCrossTh
2、副线程函数中通过Control.Invoke(Delegate d)来通过委托方式来调用处理控件的方法。 线程函数: private void go() { while (b) { listBox1.Invoke(new DDO(cc));//DDO为委托类型 private delegate ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 57、介绍Collection框架的结构 58、Collection框架中实现比较要实现什么接口 59、...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 38 57、介绍Collection框架的结构 43 58、Collection框架中实现比较要实现什么接口 43 ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 38 57、介绍Collection框架的结构 43 58、Collection框架中实现比较要实现什么接口 43 ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 38 57、介绍Collection框架的结构 43 58、Collection框架中实现比较要实现什么接口 43 ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 38 57、介绍Collection框架的结构 43 58、Collection框架中实现比较要实现什么接口 43 ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 38 57、介绍Collection框架的结构 43 58、Collection框架中实现比较要实现什么接口 43 ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 38 57、介绍Collection框架的结构 43 58、Collection框架中实现比较要实现什么接口 ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 42 57、介绍Collection框架的结构 47 58、Collection框架中实现比较要实现什么接口 47 ...
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 38 57、介绍Collection框架的结构 43 58、Collection框架中实现比较要实现什么接口 43...
10、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? .................................................................................................................................