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
});

Control.Invoke在当前上下文中不存在

很难从你对代码的了解中分辨出来,但也许你可以使用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委托,该方法在对象中传递给右线程,然后执行。工作得很好,我觉得这个代码很性感。