我正在创建一个新线程,在后台线程方法中我会工作,然后调用另一个方法来完成工作。
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方法和失败的方法一样引用它。
答案 0 :(得分:2)
不,您不需要对已完成执行的线程进行任何清理。你实际上应该努力永远不要打电话给Abort
,因为这是一种破坏性的方法,并且提供一种更“礼貌”的方式来告知线程它应该立即退出,最好是用Abort
猛烈地结束它。
此外,如果您的工作不是特别长时间运行,那么您可能应该使用Task
中提供的新System.Threading.Tasks
课程或使用System.Threading.ThreadPool.QueueUserWorkItem()
而不是自己动手线程。
话虽如此,但您没有提供足够的信息来回答您的InvalidCastException
问题。它正在尝试什么样的演员? doWork
的正文与失败声明中使用的值之间的关系(如果有)是什么?
答案 1 :(得分:0)
Adam提供了有关线程问题的完整答案。我只是另一个暗示。你的线程(我在示例代码中看到)不是后台线程。此外,我认为所有多线程应用程序都需要一个正常退出的计划(考虑系统关闭)。
为了找出什么是投射错误的来源,我建议将这行代码分成3行,因为其中一个参数不是正确的类型。