C#线程问题求教
这个问题是我在使用DIGITAL PERSONA的URU指纹识别SDK的时候遇到的,大致的代码如下:
- C# code
// 这个interface 是SDK提供的,它的内部详细内容我不了解interface Eventhandler{ public void OnSomeEvent();}// 这个class 是SDK提供的,它的内部详细内容我不了解public class FingerPrintCapturer{ public EventHandler CapturerEventHandler;}// 我的自定义类public class MyForm: Form, EventHandler{ private FingerPrintCapturer FPCapturer; private Label label1; public Class1() { FPCapturer = new FingerPrintCapturer(); // 似乎这个对象运行在一个新线程中 FPCapturer.CapturerEventHandler = this; // 实际上这一行的接口赋值也一直没搞懂,相关帖子见下文 } // 似乎是这个函数运行在一个新线程中 public void OnSomeEvent() { // method definition } private void ModifyStatusLabel() { // 下面这行报告跨线程操作的一个错误 // Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on. this.label1.Text = "SOME TEXT"; }}
我以前只用过C++ boost的线程,对C#的线程了解还不多,上面这段代码只是为了说明一下问题,我自己大致的理解是:
FingerPrintCapturer的实例FPCapturer运行在一个新线程中,而FPCapturer中OnSomeEvent()函数是在MyForm中实现的,因此当OnSomeEvent()函数调用的MyForm其他函数时带来了跨线程操作的问题,但是具体如何解决我不知道,高手万万不能见死不救啊
顺便说,关于那个接口赋值的问题,一直也没弄明白是怎么回事,有经验的请帮我在这个帖子上回答一下:
http://topic.csdn.net/u/20120925/21/3e596554-0436-414e-b6c7-99e74e4d8d84.html
[解决办法]
用委托,请看c#委托的相关帮助和介绍.
[解决办法]
http://www.cnblogs.com/txw1958/archive/2012/08/21/csharp-crossthread-widget.html