代码之家  ›  专栏  ›  技术社区  ›  Nathan

在C#/Winforms中使Webservice方法异步

  •  1
  • Nathan  · 技术社区  · 17 年前

    在C#/winforms中为此类方法创建异步包装器的最佳方法是什么?

    目前,我正在使用线程池运行webservice方法,然后在webservice完成时调用一个事件。像这样的。

    DoWorkAsync() {
        Webservice.LongMethod()
        WorkCompleteEvent()
    }
    

    有人对解决这个问题还有其他建议吗?

    3 回复  |  直到 16 年前
        1
  •  6
  •   mundeep    17 年前

    请参阅上的MSDN文章 How to: Make Thread-Safe Calls to Windows Forms Controls &乔恩·斯基特也很棒 guide to threading Threading in Windows Forms .

    引用Jon(我的重点):

    援引 , EndInvoke 调用所需 每个控件都有效地绑定到运行其消息泵的线程。 在某些情况下,你可能会侥幸逃脱,但只能靠运气。 幸运的是,已经提供了Invoke、BeginInvoke和EndInvoke方法,因此您可以要求UI线程以安全的方式为您调用方法。

        3
  •  -1
  •   Community Mohan Dere    9 年前

    您可以使用异步委托来调用web方法。 你可以看看 Asynchronous File Copy/Move in C# 看看怎么做。考虑FrimeCopp是您的Web方法(而不是如E中所示的类方法)。

    有关跨线程错误,请参阅 crossthread operations error