C# 事件(com库)-更新GUI

C# 事件(com库)-更新GUI,c#,com,C#,Com,我有一个金融图书馆(com),每当价格发生变化时,它都会调用一个事件。我订阅了这个事件并尝试更新一个文本框,但我总是得到一个跨线程操作。好的,我使用委托,但它根本不起作用。。。这是冻结应用程序。我的假设是,在GUI有时间刷新之前,事件被快速调用。你知道我该怎么处理吗 我现在唯一的解决办法是: CheckForIllegalCrossThreadCalls = false; 但我知道这是一个非常糟糕的做法 我使用.NET3.5和c# 编辑:代理代码 private delegate void U

我有一个金融图书馆(com),每当价格发生变化时,它都会调用一个事件。我订阅了这个事件并尝试更新一个文本框,但我总是得到一个跨线程操作。好的,我使用委托,但它根本不起作用。。。这是冻结应用程序。我的假设是,在GUI有时间刷新之前,事件被快速调用。你知道我该怎么处理吗

我现在唯一的解决办法是:

CheckForIllegalCrossThreadCalls = false;
但我知道这是一个非常糟糕的做法

我使用.NET3.5和c#

编辑:代理代码

private delegate void UpdateTextBoxDelegate(String value);

private void UpdateTextBox(String value)
{
    this.txtPrice.Text = value;
}

txtPrice.Invoke(new UpdateTextBoxDelegate(UpdateTextBox), price);

如果您正在使用事件,它应该自动封送到UI线程。这就是
BackgroundWorker
的工作原理。您必须发布如何钩住事件和事件回调本身

invokererequired==true
时,也可以尝试使用
Invoke

using System.ComponentModel;
public static class ISynchronizeInvokeExtensions
{
  public static void InvokeEx<T>(this T @this, Action<T> action) where T : ISynchronizeInvoke
  {
    if (@this.InvokeRequired)
    {
      @this.Invoke(action, new object[] { @this });
    }
    else
    {
      action(@this);
    }
  }
}
this.InvokeEx(f => f.txtPrice.Text = price);