【问题标题】:How to Access one project from the other when one started in another Thread当一个项目在另一个线程中启动时如何从另一个项目访问一个项目
【发布时间】:2013-12-29 22:29:27
【问题描述】:

大纲: 我有两个项目。一个项目是Primary,用于GUI 和信息的初级处理。第二个项目次于第一个项目,并在一段时间内完成任务。

启动二级项目:

Thread thread = new Thread(() =>
{
main.MainForm = new MainForm();
main.MainForm.FormClosed += new FormClosedEventHandler(MainForm_FormClosed);
main.MainForm.ShowMainForm();
Application.Run();
});
thread.SetApartmentState(ApartmentState.MTA);
thread.Start();

参考资料: 我在主项目中添加了对辅助项目的引用,以便我可以访问它。

我的问题: 我需要一种方法来报告进度和任何可能出现的问题回到主要项目。当我在另一个线程中启动辅助项目时,我似乎失去了对辅助项目的很多访问权限。

我已尝试参考:

main.MainForm...

这似乎有点问题。

我想知道是否有办法通过某种简单的事件系统来管理我的代码,特别是进度和错误?

对于在这种情况下的最佳实践提供任何帮助和/或想法将不胜感激。

【问题讨论】:

  • 引用不起作用,因为通过引用您实际上只引用当前的可执行程序集 (app1) 并且无法访问另一个进程 (app2)。你应该看看进程间通信stackoverflow.com/questions/528652/…
  • “有点问题”不是问题描述!问题描述是:“我想知道是否有办法通过某种简单的事件系统来管理我的代码,特别是进度和错误?”。 Aleksander Toplek 回答了我的问题。 P.S:我没有收到错误,我的辅助应用程序是完全独立的,我只需要它来报告错误和进度。多亏了 Aleksander Toplek,它现在可以完美运行。谢谢冠军!

标签: c# multithreading project-management


【解决方案1】:

此答案属于:Aleksandar Toplek - 请参阅上面的注释。

• 匿名管道。

匿名管道在本地计算机上提供进程间通信。匿名管道比命名管道需要更少的开销,但提供的服务有限。匿名管道是单向的,不能通过网络使用。它们仅支持单个服务器实例。匿名管道对于线程之间或父进程和子进程之间的通信很有用,其中管道句柄可以在创建时轻松传递给子进程。

• 命名管道。

命名管道提供管道服务器和一个或多个管道客户端之间的进程间通信。命名管道可以是单向管道或双工管道。它们支持基于消息的通信,并允许多个客户端使用相同的管道名称同时连接到服务器进程。命名管道还支持模拟,这使得连接进程能够在远程服务器上使用它们自己的权限。

.NET Framework 中的管道操作

http://msdn.microsoft.com/en-us/library/bb762927(v=vs.110).aspx

如何:使用匿名管道进行本地进程间通信

http://msdn.microsoft.com/en-us/library/bb546102.aspx

AnonymousPipeServerStream 类

http://msdn.microsoft.com/en-us/library/system.io.pipes.anonymouspipeserverstream(v=vs.110).aspx

AnonymousPipeClientStream 类

http://msdn.microsoft.com/en-us/library/system.io.pipes.anonymouspipeclientstream(v=vs.110).aspx

这里有一个很好的例子:C# Async Named Pipes

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多