|ZYCWPF| 如何实时录制和共享RichTextBox数据 谢谢
如,我有这样的一个需求:
教师打开程序界面有一个RichTextBox,和一个共享按钮
点击共享按钮后,在学生客户端可以共享教师端的RichTextBox数据
用:string innerText = System.Windows.Markup.XamlWriter.Save(richContent.Document);取得RichTextBox的数据
以下为要求:
1:当老师在RichTextBox有更改时进行发送同步
2:将老师的整个播放录制下来,也就是说到时要对都是操作进行回放
我自己想到的同步录制实现(因为第一闪RichTextBox有变化都同步我感觉不太可能,因为这个RichTextBox可能比较大,所以用计时器来判断差异)
1:当教师点击共享按钮后,启动一个记录RichTextBox的记时器
2:这个记时器每1秒去读取RichTextBox的内容,
3:计时器读出来的数据和上一次读取出来的数据进行对比,如果不同,则将当前数据进行同步到学生端,但在数据库中保存当前时间和当前内容的一条记录
回放的方法为:
从数据库中按时间读出原来保存的时间和内容信息,并根据时间戳将相应记录的内容显示到RichTextBox中
以上的方法大体能实现我要的功能,但有一个不足是,每一次保存都是保存当时的整个信息,
而不是保存差异,这样在同步共享数据的时候每次都得发送整个RichTextBox的内容
麻烦看一下这方法是否可行,有没有更好的办法
谢谢
[最优解释]
看包不包括图片。
如果只是文字,在TextChanged事件中也不必每次都传送变更,检测到UndoAction为Create后再传递,本行的小的变化该行为都会是Merge,不用传送,只记录结尾位置。当UndoAction为Create时,记录下OffSet,在下一次Create时,根据前面记录的结尾位置传送变更内容。
如果包括图片,分为粘贴的还是通过文件对话框嵌入的,如果是前者就需要在UndoAction为Create时看看粘贴图片和键入文字有什么区别,或者干脆取消粘贴功能,都采用通过文件对话框嵌入,这样容易控制,执行嵌入操作时记录位置,传送位置和图片数据就行了。
[其他解释]
建议保存差异。在TextChange中编写。
文本差异算法参考:http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html 其中的编辑距离(LD算法)。
[其他解释]
ER 看了好高深
[其他解释]
不高深,这个算法我在csdn贴过,一下找不到了。。。
[其他解释]
这个算法有个缺陷,就是比如
123
123123
无法真实再现是123后输入了123,还是1和3之间粘贴了231。但是总之能够准确还原每一步的结果。
还有个办法,就是继承一个类,拦截键盘操作、复制粘贴、Text属性更改等,写起来麻烦,技术简单。但是要考虑很多细节,否则就不对了。
[其他解释]