在C#或者SWT上跨进程访问SWT控件的问题
摘要:可能为了进程安全,无论是C#的Form还是Eclipse的SWT,都不允许跨进程访问控件。 通俗一点说就是: A进程创建了控件Widget,若想在B进程中访问控件Widget就会报错,必须在创建Widget的进程中访问该控件。即使将进程B的对象写成内部类放在A进程的类中也不行。 解决办法就是: Java:使用Display.getDefault().syncExec(new Runnable() {public void run() {//操作控件的代码。}}); C#:使用delegate 委托。
阅读全文
线程间操作无效: 从不是创建控件的线程访问它.
摘要:有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数。 问题原因是。net2.0以后拒绝多线程访问空间,避免空间造成死锁。以前Control.CheckForIllegalCrossThreadCalls =false;默认就是这样,现在默认为true。如果不会好几个线程同时操作一个控件用方法1就可以。如果存在多个线程一起操作控件使用方法2 方法2可以 Invoke(new MethodInvoker(delegate() ...
阅读全文