帮助c#线程

时间:2011-03-04 04:48:33

标签: c# winforms

我正在创建一个新线程,在后台线程方法中我会工作,然后调用另一个方法来完成工作。

myThread = new Thread(new ThreadStart(doWork));
            myThread.Start();

问题是当我离开后台工作者方法去另一个方法并执行它时:

browser.SelectList(Find.ById("selStartYear")).SelectByValue(startYear);

我得到InvalidCastException

当我的后台工作方法完成后,我是否需要对该线程执行某些操作?我看到我启动了线程,但是在它调用的新方法中调用abort只是暂停程序。

修改:我正在使用WakiN并在全球范围内创建了新的IE

IE browser = new IE("http://www.website.com/");

我的worker方法和失败的方法一样引用它。

2 个答案:

答案 0 :(得分:2)

不,您不需要对已完成执行的线程进行任何清理。你实际上应该努力永远不要打电话给Abort,因为这是一种破坏性的方法,并且提供一种更“礼貌”的方式来告知线程它应该立即退出,最好是用Abort猛烈地结束它。

此外,如果您的工作不是特别长时间运行,那么您可能应该使用Task中提供的新System.Threading.Tasks课程或使用System.Threading.ThreadPool.QueueUserWorkItem()而不是自己动手线程。

话虽如此,但您没有提供足够的信息来回答您的InvalidCastException问题。它正在尝试什么样的演员? doWork的正文与失败声明中使用的值之间的关系(如果有)是什么?

答案 1 :(得分:0)

Adam提供了有关线程问题的完整答案。我只是另一个暗示。你的线程(我在示例代码中看到)不是后台线程。此外,我认为所有多线程应用程序都需要一个正常退出的计划(考虑系统关闭)。

为了找出什么是投射错误的来源,我建议将这行代码分成3行,因为其中一个参数不是正确的类型。