【发布时间】:2015-02-16 02:17:43
【问题描述】:
我有一个将日志打印到列表框的静态类,因此我可以全局使用它,因此我使用了在我的 cls_globalvariables 静态类中定义的 BindingList 的全局实例。我在 UI 构造函数中将 BindingList 绑定到 UI 的列表框。
public static class cls_globalvariables
{
public static BindingList<string> logList = new BindingList<string>();
....
}
static class LOGS
{
public static void LOG_PRINT(string logMessage, bool isNotError)
{
string now = DateTime.Now.ToString();
try
{
if (logMessage == "") return;
if (!isNotError)
logMessage = "<<<ERROR>>>" + logMessage;
// Output to text file.
using (StreamWriter w = System.IO.File.AppendText(cls_globalvariables.systemlogpath))
{
w.WriteLine("[" + now + "][" + logMessage + "]");
w.Close();
}
// Save to memory
cls_globalvariables.logList.Add("[" + now + "][" + logMessage + "]");
}
catch (Exception)
{ }
}
}
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
listBox1.DataSource = cls_globalvariables.logList;
}
}
但是,我只在后台工作程序中调用 LOGS.LOG_PRINT,因此它在另一个线程中执行。列表框会延迟更新,直到后台工作人员完成其进程。我错过了什么吗?
【问题讨论】:
标签: c# multithreading listbox backgroundworker