簡體   English   中英

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

[英]C# Process.Start, Thread.IsBackGround, BackgroundWorker and .Net.Remoting


我需要建議,因為我被“鎖定”了...

我有一個客戶端服務器應用程序在客戶端進程和服務器端之間使用.NetRemoting。
服務器進程向客戶端調用方法引發事件。
然后,客戶端使用BackGroundWorker將值傳輸到用戶界面。

通常,啟動客戶端時服務器已經在運行。
-調用BackGroundWorker.DoWork()時,Thread.CurrentThread.IsBackground等於True
-在BackGroundWorker_RunWorkerCompleted事件中,Thread.CurrentThread.IsBackground等於False

但是,如果在客戶端加載過程中(.exe正在打開),則需要在連接之前打開服務器進程(.exe)(使用Process.Start())。
然后,在BackGroundWorker_RunWorkerCompleted中,Thread.CurrentThread.IsBackground仍然等於True,並且無法在此線程中更改UI。
在這種情況下,我需要打開另一個客戶端(連接到同一服務器)以具有良好的行為。


這兩種情況之間可能有什么區別?
謝謝。

您應該擁有什么:

客戶:
--UI線程:啟動BGWorker並運行BackgroundWorker.RunWorkerCompleted
--Backgroundthread:運行BackgroundWorker.DoWork,與服務器通信

<->

服務器:與客戶端通信

客戶端啟動時,為什么服務器尚未運行? +如果它們在同一台計算機上運行,​​為什么還要使用遠程處理?

我已經找到(a)解決方案:在客戶端啟動中:

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

或(未測試至極)

RemotingConfiguration.ApplicationName = "EDV";

必須啟動服務器進程之前進行設置!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM