当一个项目在另一个线程中启动时,如何从另一个项目访问

时间:2013-12-29 22:29:28

标签: c# multithreading project-management

概要 我有两个项目。一个项目是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...

这似乎有点问题。

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

非常感谢在这种情况下对最佳做法的任何帮助和/或想法。

1 个答案:

答案 0 :(得分: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