C#Process.Start,Thread.IsBackGround,BackgroundWorker和.Net.Remoting

时间:2011-03-17 13:07:24

标签: c# multithreading backgroundworker .net-remoting process.start


我需要一个建议,因为我“被锁定”......

我有一个客户端服务器应用程序,在客户端进程和服务器进程之间使用.NetRemoting。
服务器进程将事件引发给调用方法的客户端。
然后,客户端使用BackGroundWorker将值传输到用户界面。

通常,客户端启动时服务器已经运行。
- 当调用BackGroundWorker.DoWork()时,Thread.CurrentThread.IsBackground等于True
- 在BackGroundWorker_RunWorkerCompleted事件中,Thread.CurrentThread.IsBackground等于 False

但是,如果在客户端加载(.exe正在打开)期间,它需要在连接之前打开(使用Process.Start())服务器进程(.exe)
然后,在BackGroundWorker_RunWorkerCompleted中,Thread.CurrentThread.IsBackground仍然等于 True ,并且在此线程中无法更改UI。
在这种情况下,我需要打开另一个客户端(连接到同一个服务器)以获得良好的行为。


这两种情况之间可能有什么区别?
感谢。

2 个答案:

答案 0 :(得分:0)

你应该拥有什么:

客户端:
--UI thread:启动BGWorker并运行BackgroundWorker.RunWorkerCompleted
--Backgroundthread:运行BackgroundWorker.DoWork,与服务器通信

< - >

服务器:与客户端通信

为什么您的服务器在您的客户端启动时尚未运行? +如果他们在同一台机器上运行,为什么要使用远程处理?

答案 1 :(得分:0)

我找到了(a)解决方案: 在客户端启动中:

lChannelTCP = new TcpChannel(lProps, provider, providerSrv);
ChannelServices.RegisterChannel(lChannelTCP, false);

或(没有测试过)

RemotingConfiguration.ApplicationName = "EDV";

必须在之前设置 服务器进程启动!