我正在尝试制作一个程序,自动搜索我在文件中复制的单词,然后将剪贴板中的单词替换为在我的文件中发现的行。我成功地设置了一个eventandler来查看剪贴板何时更改。我现在正在尝试实现一种读取我的文件的方法。
尝试使用StringReader
后抛出异常:
FORMATETC结构无效。
这是我现在的代码:
public partial class MainWindow : System.Windows.Window
{
string line;
string currentClipboardContent;
string expectedClipboardContent;
string vocabularygerman = Properties.Resources.vocabularygerman;
string vocabularyfrench = Properties.Resources.vocabularyfrench;
int lineNumber;
public MainWindow()
{
InitializeComponent();
Windows.ApplicationModel.DataTransfer.Clipboard.ContentChanged += new EventHandler<object>(this.TrackClipboardChanges_EventHandler);
}
private async void TrackClipboardChanges_EventHandler(object sender, object e)
{
DataPackageView dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
if (dataPackageView.Contains(StandardDataFormats.Text))
{
currentClipboardContent = await dataPackageView.GetTextAsync();
if (expectedClipboardContent != currentClipboardContent)
{
Thread.Sleep(500);
using (var reader = new StringReader(vocabularygerman))
{
lineNumber = 0;
while ((line = reader.ReadLine()) != null)
{
lineNumber++;
if (line.Contains(currentClipboardContent))
{
System.Windows.Forms.Clipboard.SetDataObject(lineNumber);
break;
}
}
}
expectedClipboardContent = System.Windows.Forms.Clipboard.GetText();
}
}
}
一切工作正常,直到我试图使用StringReader。我正在考虑完全放弃字符串阅读器并使用流阅读器,但是我无法在资源中使用我的vocabularygermany .txt文件。
StringReader
没有实现IDataObject
接口,因此SetDataObject
方法不喜欢这样,因为它依赖于该接口的存在。
试
Clipboard.SetText(lineNumber.ToString())
如果你需要StringReader
.
PS:对async
调用使用await