【发布时间】:2013-03-23 19:31:41
【问题描述】:
这是我的情况。我对此还是很陌生。我正在我的 linux 虚拟框中生成一些 .txt 文件,并在 Windows 中使用 c# winform 应用程序将数据加载到图表中。大约有20个左右的文件。我需要做的是加载第一个文件,将其显示在图表上,重新加载文件并将其显示在图表上,重新加载文件,将其显示在图表上等。我的 c 代码每次都在同一个文件上写入时间与新的价值观。因此,当您查看图表时,在 winforms 中,您会看到数据在加载每个新数据集时发生转换。这应该很快发生。一些新数据加载,但随后我收到有关另一个进程正在使用的文件的错误。我一直在阅读有关该错误的信息,但我想我仍然不明白如何解决它。我需要生成文件的 c 代码与 c# 图表加载代码对齐,以便顺利进行。在 C 语言中,我还收到一条错误消息,指出无法打开文件进行写入。
这是我迄今为止尝试过的。在打开文件进行写入之前,我尝试在 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# 程序访问相同的事件。然后您可以在程序之间进行适当的同步。
-
不,先生。我被 linux 困住了
标签: c# c winforms filesystemwatcher