C# WinForms应用程序的跨线程操作

C# WinForms应用程序的跨线程操作,c#,.net,multithreading,winforms,C#,.net,Multithreading,Winforms,是否有一种简单、实际可重用的方式/方法来执行长时间运行的跨线程操作?我的意思是,我需要处理一些需要花费一些时间的事情(发送邮件、上传到DB和FTP服务器),但我还需要同时与表单及其控件进行交互。有很多选项。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件 实现这一点的最常见机制是使用: 使用/ 手动创建线程 有很多选择。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件 实现这一点的最常见机制是使用: 使用/ 手动创建线程 查看BackgroundWor

是否有一种简单、实际可重用的方式/方法来执行长时间运行的跨线程操作?我的意思是,我需要处理一些需要花费一些时间的事情(发送邮件、上传到DB和FTP服务器),但我还需要同时与表单及其控件进行交互。

有很多选项。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件

实现这一点的最常见机制是使用:

  • 使用/
  • 手动创建线程

    • 有很多选择。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件

      实现这一点的最常见机制是使用:

      • 使用/
      • 手动创建线程

      查看
      BackgroundWorker
      类。这将允许在更新UI时运行长时间运行的进程,而不必手动
      Invoke()
      UI更新UI线程,如果手动使用线程,则必须执行此操作。

      查看
      BackgroundWorker
      类。这将允许在更新UI时运行长时间运行的进程,而无需手动
      Invoke()
      UI更新UI线程,如果手动使用线程,则必须执行此操作。

      您希望表单的Invoke/BeginInvoke方法允许对UI执行corssthread操作


      最好是创建一个类,该类在另一个线程中执行长任务,并具有一些事件来向窗体发送信号,然后在窗体中可以使用this.BeginInvoke在主线程中执行UI操作。

      您希望窗体的Invoke/BeginInvoke方法允许对UI执行交叉线程操作


      最好是创建一个类,该类在另一个线程中执行长任务,并具有一些事件来向窗体发送信号,然后在窗体中可以使用this.BeginInvoke在主线程中执行UI操作。

      。。。有什么问题吗?您可以将长时间运行的操作放在不同的线程上,如果需要访问控件,只需将调用委托给UI线程即可。谢谢PoweredByOrange,谢谢@JimMischel,我现在正在查看该链接。我必须承认,术语对我来说是最难学的部分。这可能就是为什么我90%的搜索都没有得到有用的结果的原因。出于某种原因,我能记住其他的东西,但术语似乎不太靠谱。所以。。。有什么问题吗?您可以将长时间运行的操作放在不同的线程上,如果需要访问控件,只需将调用委托给UI线程即可。谢谢PoweredByOrange,谢谢@JimMischel,我现在正在查看该链接。我必须承认,术语对我来说是最难学的部分。这可能就是为什么我90%的搜索都没有得到有用的结果的原因。出于某种原因,我还记得其他事情,但术语似乎不太靠谱。@JimMischel不直接处理线程问题,尽管在使用任务/任务时,您可以使用它简化代码的编写。@JimMischel不直接处理线程问题,尽管在使用Task/Task时,您可以使用它简化代码的编写。