這裏是我的情況。我在這方面還很新。我在我的linux虛擬框中生成一些.txt文件,並在Windows中使用c#winform應用程序將數據加載到圖表中。大約有20個左右的文件。我需要做的是加載第一個文件,將其顯示在圖表上,重新加載文件並將其顯示在圖表上,重新加載文件並將其顯示在圖表等上。我的c代碼每隔一段時間就在同一個文件上進行編寫時間與新的價值。所以在winforms中查看圖表時,您會看到數據在每個新數據集加載時都會轉換。這應該相當快地發生。一些新的數據加載,但然後我得到有關另一個進程正在使用的文件的錯誤。我一直在閱讀有關錯誤,但我想我仍然不明白如何解決這個問題。我需要生成文件的c代碼與c#圖表加載代碼保持一致,以便順利進行。在C中,我也收到一條錯誤消息,指出該文件無法打開進行寫入。FileSystemWatcher無法訪問文件,因爲它被另一個進程使用
這是我到目前爲止嘗試過的。在打開文件以進行寫入之前,我嘗試在c代碼中等待一段時間,但沒有成功。我也試過只是試圖打開文件,直到它打開沒有錯誤,但它沒有奏效。我唯一能想到的其他解決方案就是創建文件,如1.txt 2.txt 3.txt,然後連續加載它們。這可能是我必須去的方式。但我還是個新手,實際上並不知道我是否以這種最好的方式開始。
C代碼
for(i = 0; i < FILES; i++){
fd = fopen(path, "w+");
if(fd == NULL){
printf("Could not open file for writing. Exiting...\n");
exit(-1);
}
for(j = 0; j < ROW; j++){
fprintf(fd, "%.4f", vector[i][j]);
fprintf(fd, "%s", "\n");
}
fclose(fd);
}
C#代碼
// Define the event handlers.
private void OnChanged(object source, FileSystemEventArgs e)
{
FinalList.Clear();
chart4.Series[0].Points.Clear();
loadData(FinalPath, FinalList, chart4);
}
private void loadData(String path, List<double> list, System.Windows.Forms.DataVisualization.Charting.Chart chart)
{
string line = null;
double value = 0;
using (TextReader reader = File.OpenText(path))
{
line = reader.ReadLine();
while (line != null)
{
value = System.Convert.ToDouble(line);
list.Add(value);
line = reader.ReadLine();
}
}
for (int i = 0; i < ROW; i++)
{
chart.Series["Graph"].Points.AddXY(i + 1, list[i]);
}
}
你能從C程序中訪問Windows API函數嗎?如果是這樣,您可以使用CreateEvent()創建同步事件,並使用ManualResetEvent從C#程序訪問同一事件。然後你可以在程序之間做適當的同步。 – 2013-03-23 19:35:26
不,先生。我與linux卡住 – 2013-03-23 19:37:39