0


我需要一個建議,因爲我是「鎖定」 ......C#的Process.Start,Thread.IsBackGround,BackgroundWorker的和.Net.Remoting

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

Usualy,服務器在客戶端啓動時已經在運行。
- 當BackGroundWorker.DoWork()被調用,Thread.CurrentThread.IsBackground等於真
- 在BackGroundWorker_RunWorkerCompleted事件,Thread.CurrentThread.IsBackground等於

但是,如果在客戶端加載中(。它需要打開(與Process.Start())服務器進程(.exe)之前,它連接
然後,在BackGroundWorker_RunWorkerCompleted,Thread.CurrentThread.IsBackground仍然等於和UI無法在這個線程中被改變。
在這種情況下,我需要打開另一個客戶端(連接到同一臺服務器)以獲得良好的行爲。


這兩種情況有什麼區別?
謝謝。

+0

您是否在非UI線程上創建BackgroundWorker?請參閱http://stackoverflow.com/questions/2806814/c-backgroundworker-runworkercompleted-event/2806824#2806824 – Justin 2011-03-17 13:17:25

回答

0

你應該有什麼:

客戶:
--ui螺紋:開始BGWorker和運行BackgroundWorker.RunWorkerCompleted
--Backgroundthread:運行BackgroundWorker.DoWork,與服務器進行通信

< - >

服務器:與客戶端通信

爲什麼不是你的服務器alrea dy在客戶端啓動時運行? +爲什麼使用遠程如果他們在同一臺機器上運行?

+0

我的服務器是一個應用程序服務器。客戶端是WinForm,Web瀏覽器或簡單的類。你可以訪問http://edv.edvariables.net幾張圖片,但演示文稿是法文,以及我的用戶界面是。對不起(翻譯它太多工作)。 – edid 2011-03-17 14:43:24

0

我發現(一)解決方案: 在客戶端啓動:

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

或(沒有測試至極一個)

RemotingConfiguration.ApplicationName = "EDV"; 

有之前設置服務器進程已啓動!