有2個完全不同的c#windows應用程序(用於桌面)。每次點擊「開始」按鈕時,一個應用程序就會生成一個CSV(包含數據)。 現在我需要將此CSV發送到另一個c#應用程序以使其通過。的「開始」按鈕下列事情應該在序列發生 的OnClick:通信b/w兩個不同的windows應用程序在c#
- 創建CSV(與輸出數據,並且由第一應用生成此數據)
- 創建CSV應該通過在第二應用程序中的功能。
- CSV數據應在第二個應用程序中處理該功能。
我能夠從第一應用程序創建CSV(第一步完成後,請建議休息?)
有2個完全不同的c#windows應用程序(用於桌面)。每次點擊「開始」按鈕時,一個應用程序就會生成一個CSV(包含數據)。 現在我需要將此CSV發送到另一個c#應用程序以使其通過。的「開始」按鈕下列事情應該在序列發生 的OnClick:通信b/w兩個不同的windows應用程序在c#
我能夠從第一應用程序創建CSV(第一步完成後,請建議休息?)
你可以嘗試從你的第二應用到librairy項目提取功能(.dll文件)。在這兩個應用程序中導入此DLL之後,您將能夠在第一個應用程序中使用該功能。
要導入項目中的.dll文件,只需進入項目設置中的「參考」選項卡並選擇「添加參考...」。
這不是兩個應用程序之間的真實通信,但它可以解決您的問題,如果您只需要像您描述的應用程序行爲。
由於您無法更改第二個應用程序,您唯一的選擇就是使用它已經支持的功能。您在評論中指出,它可以接受文件名作爲命令行參數。所以(可能唯一的)方法是讓第一個應用程序啓動第二個應用程序,並在命令行中提供CSV文件的路徑。
首先,我會用第一個應用程序創建CSV文件,並將其存儲在兩個應用程序都可以訪問的文件夾中。之後,您可以使用命令提示符窗口來啓動第二個應用程序並提供文件路徑(以及其他必要的參數)。一旦你能夠啓動第二個應用程序,就可以擴展第一個應用程序來創建該過程。
主要類是Process類。以下是你需要轉移到您的情況爲例:
var csvPath = System.IO.Path.GetTempFileName(); // Use a temporary file
// ... Create CSV
try
{
var pathToSecondApp = "C:\\SecondAppFolder\\SecondApp.exe";
var psi = new ProcessStartInfo(pathToSecondApp);
psi.Arguments = "-file \"" + csvPath + "\""; // command line arguments for the process
using(var p = Process.Start(psi))
{
// Wait for process to complete
p.WaitForExit();
// Analyze return code
if (p.ExitCode != 0)
throw new ApplicationException("Error running Second App");
}
}
finally
{
// Delete CSV
System.IO.File.Delete(csvPath);
}
FileSystemWatcher的或某種IPC的... –
你能夠改變的第二個應用程序?它是否接受一個文件名作爲命令行參數? – Markus
不,我無法從第一個應用程序中更改第二個應用程序。是的,它接受一個文件名作爲命令行參數,但我需要從第一個應用程序調用它。 – Shubh