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

给定一个线程上的事件,在.Net中的另一个线程上执行任务/方法的最佳方法是什么?

  •  1
  • Elan  · 技术社区  · 16 年前

    以下是我要实现的具体目标:

    使用.Net 3.5,我有一个Windows服务,其中有一个WCF服务正在运行。我有一个客户端,它从WCF服务(Net.Tcp binding)请求一个文件,然后WCF服务将该文件复制到指定的位置,然后客户端可以在该位置对其进行编辑/修改。WCF服务正在InstanceContextMode.PerSession模式下运行。

    在编辑文件时,我希望将文件锁定在承载WCF服务的计算机上。文件返回后,我希望再次解锁文件。我不相信我可以在WCF服务中锁定该文件,因为一旦复制了该文件,服务会话就结束了,并且我假设此时不会保留对该文件的锁定。

    在我看来,首选的方法是在需要锁定/解锁时从WCF服务内部触发事件。与持续的投票相反。但是,锁定/解锁任务的执行需要在不同的线程上进行(例如,在Windows服务上下文中运行的线程)。

    我们使用Windows窗体来实现这一点,在Windows窗体中,我们可以从后台线程调用要在UI消息传递线程上执行的方法。有没有办法在另一个线程(不是UI消息传递线程)上“调用”方法?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Wagner Silveira    16 年前

    你有没有想过有一个锁定/解锁服务来处理这个问题?这样,您可以在需要时从WCF调用锁定服务,并让其他服务处理锁定问题。该服务还将处理孤立的签入等。

        2
  •  0
  •   No Refunds No Returns    16 年前

    MS Office使用与目标文件名类似的名称的单独文件来执行此操作。只要你能完全访问目的地,你也可以做同样的事情,听起来你是这样做的。我真的会尽量避免锁上任何东西。

    您需要一个签入/签出过程,以及一种从失败的签入、失败的签出和未返回的签出中重新记录的方法。

    推荐文章