0


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

我有一个在客户端进程和服务器之间使用 .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。
在这种情况下,我需要打开另一个客户端(连接到同一台服务器)以获得良好的行为。


这两种情况有什么区别?
谢谢。

4

2 回答 2

0

你应该拥有的:

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

<->

服务器:与客户端通信

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

于 2011-03-17T14:02:53.113 回答
0

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

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

或(没有测试其中一个)

RemotingConfiguration.ApplicationName = "EDV";

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

于 2011-03-17T14:41:02.793 回答