对于C#和编码来说,这是一个相对较新的概念。我正在尝试编写一个具有某些逻辑的程序,并且还指出了进度条的进度。我正在Main()中启动一个线程,它执行我所有的业务逻辑。它有一些事件在我需要进度条的地方被激怒。C#Winform多线程序列
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是表单。创建报告是我的业务逻辑开始的地方。
这就是为什么我将构造函数从默认的VC#S项目中分离出来的原因。它似乎并没有工作。给我一个错误,说在创建对象之前我不应该使用Invoke/BeginInvoke。如果我将一个try catch块放入空捕捉块中,它确实有效,但感觉像是一个黑客。这可能只是我很挑剔。 – whatsinaname 2011-04-06 00:10:56
这是一个黑客。 .Net中基于表单的应用程序基本上是围绕主表单的概念构建的。没有理由与之抗衡,因为您的项目已经使用了主表单。 – MusiGenesis 2011-04-06 00:27:59
将此标记为答案,因为正如波马提到的那样,表单已经存在。该错误在我的代码的不同部分。谢谢。 – whatsinaname 2011-04-18 14:03:14