Control.Invoke在当前上下文中不存在
本文关键字:上下文 不存在 Invoke Control | 更新日期: 2023-09-27 18:09:16
错误:名称"Invoke"在当前上下文中不存在
我正在处理的类已经有了基类,所以我不能让它实现Windows.Forms.Control.之类的东西
我看了这里的文章,但我不想实现另一个接口,也不知道我会在方法中放入什么。
这是一个相当低级别的C#适配器程序,因此它无法访问大多数UI内容所使用的库
编辑我正试着做一些类似的事情
// On thread X
Invoke((m_delegate)delegate(){
// Do something on main thread
});
很难从你对代码的了解中分辨出来,但也许你可以使用System.Threading.SynchronizationContext来做你想要的事情。
您只需要在UI线程中捕获上下文(例如,通过在那里构建对象(,并使用SynchronizationContext模拟Control.Invoke
class MyObj
{
SynchronizationContext _context;
// please Note: construct the Objects in your main/ui thread to caputure the
// right context
public MyObj()
{
CaptureCurrentContext();
}
// or call this from your main/UI thread
public void CaptureCurrentContext()
{
_context = SynchronizationContext.Current;
}
public void MyInvoke(Action a)
{
_context.Post((SendOrPostCallback)(_ => a()), null);
}
}
BTW:对于几乎相同的问题,这里有一个很好的答案:使用SynchronizationContext发送。。。
我最终使用了带有匿名方法的Action委托,该方法在对象中传递给右线程,然后执行。工作得很好,我觉得这个代码很性感。