【发布时间】:2011-04-05 23:06:42
【问题描述】:
我对 C# 和一般编码相对较新。我正在尝试编写一个具有一些逻辑并且还通过进度条指示进度的程序。我正在 Main() 中启动一个线程,它执行我所有的业务逻辑。它具有在我需要更新进度条的点触发的事件。
Form 对象订阅业务逻辑事件并具有线程安全的委托,这些委托被调用以更新进度条和文本标签。
我的问题是,由于Form是在主线程中启动的,所以我必须在Application.Run()之前启动业务逻辑线程。当第一个 ProgressUpdate 事件被触发时,Form 对象仍然不存在。我想一个 hacky 方法是在第二个线程中添加 Thread.Sleep(100) ,但我不喜欢那样。我该如何解决这个问题?我是在完全错误的轨道上吗? (我说得有道理吗?)
Form1 theForm = new Form1();
CreateReport theCreateReport = new CreateReport();
Thread t = new Thread(new ThreadStart(theCreateReport.DoProcess));
t.IsBackground = true;
theForm.Subscribe(theCreateReport);
t.Start();
Application.Run(theForm);
theForm 是表单。 theCreateReport 是我的业务逻辑开始的地方。
【问题讨论】:
标签: c# winforms multithreading