火球法师
精华
|
战斗力 鹅
|
回帖 0
注册时间 2012-12-14
|
楼主 |
发表于 2021-5-27 17:10
|
显示全部楼层
本帖最后由 独自旅行 于 2021-5-27 17:18 编辑
看书发现INotifyPropertyChanged可以实现对流文件监控,所以想使用监控事件来触发重新读取INI文件。
但是它报错啊!
同样的功能(),按钮触发就正常运转,自动监控就报错。
懵了。如果按下面这么写,就会跳错『$exception {"线程间操作无效: 从不是创建控件“socpath”的线程访问它。"} System.InvalidOperationException』
===========================================================================
- private void Form1_Load(object sender, EventArgs e)
- {
- LoadINI();
- UsingFileSystemWatcher();
- }
- void LoadINI();
- {
- str = Application.StartupPath + "\\ConnectString.ini"; //INI文件的物理地址
- strOne = System.IO.Path.GetFileNameWithoutExtension(str); //获取INI文件的文件名
- if (File.Exists(str)) //判断是否存在该INI文件
- {
- str_group = ContentReader(strOne, "Group", ""); //读取INI文件中组名称
- str_job = ContentReader(strOne, "Server task", ""); //读取INI文件中服务器任务
- str_soc = ContentReader(strOne, "Source Path", ""); //读取INI文件中源文件夹
- str_opt = ContentReader(strOne, "Output path", ""); //读取INI文件中输出文件夹
- str_ftpsvr = ContentReader(strOne, "FTP address", ""); //读取INI文件中FTP服务器的内容
- }
- Group.Text = str_group; //显示INI文件中组名称
- job.Text = str_job; //显示INI文件中服务器任务
- socpath.Text = str_soc; //显示INI文件中源文件夹
- optpath.Text = str_opt; //显示INI文件中输出文件夹
- }
- void UsingFileSystemWatcher()
- {
- FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
- fileSystemWatcher.Path = Application.StartupPath; //设置监控的文件目录
- fileSystemWatcher.IncludeSubdirectories = false; //设置监控目标目录下的所有子目录
- fileSystemWatcher.Filter = "*.ini"; //设置监控文件的类型
- fileSystemWatcher.Changed += FileSystemWatcher_Changed; //设置文件的文件名、目录名及文件的大小改动会触发Changed事件
- fileSystemWatcher.EnableRaisingEvents = true; //启动监控
- }
- void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
- {
- LoadINI();
- }
复制代码
===========================================================================
但是如果写成下面这样使用按钮人工触发的话又是正常运转的。
怎么治它啊?我想借助流文件监视来实现自动载入……
- private void button1_Click(object sender, EventArgs e)
- {
- LoadINI();
- }
复制代码
|
|