我做了一个非常简单的聊天程序。它只是将消息保存为txt文件中的新行,并在richtextbox中显示该txt文件。我遇到的问题是用户必须单击“更新”才能更新聊天记录。我写了一个循环,它会检查每一秒是否有新消息,但这会锁定表单,如果用户想要在此期间发送消息,他们将需要终止该表单。
这有可能吗?在将新行添加到txt文档时甚至是定期间隔时自动更新聊天记录?
目前我正在使用的是:
$i = 1
While ($i -eq 1)
{
sleep -Seconds 1
$BEFORE = $richtextbox1.Text
$CHATLOG = "\\NetworkShareEveryoneHasAccess\Chat.txt"
$TOOUTPUT = Get-Content $CHATLOG | Out-String
$richtextbox1.Text = $TOOUTPUT
$AFTER = $richtextbox1.Text
if ($BEFORE -ne $AFTER)
{
$i = 0
$richtextbox2.Enabled = $true
$richtextbox2.SelectionStart = $richtextbox2.TextLength;
$richtextbox2.ScrollToCaret()
$richtextbox2.Focus()
}
}
同样,问题在于它在检查是否有新消息(txt文件中的新行)时冻结了表单。
由于我对PowerShell的了解有限,我想说这是不可能的,但正如我所说,我的PowerShell知识有限。
答案 0 :(得分:0)
您可以将写入和读取的进程从文件中分离出来,而不是使用sleep并检查整个文件是否有任何新写入。然后在阅读过程中使用Get-Content -Path Chatfile.log -Tail 1 -Wait
形式,每当Chatfile被更改时,它将返回一个新行。这显示了这个概念:
$EXITFLAG = 0
$chatLog = "chat.txt"
$logRead = Start-Process powershell.exe -PassThru -ArgumentList "-file logread.ps1"
while ($EXITFLAG -eq 0)
{
$userTxt = Read-Host "Enter some text to chat (Q to exit)"
if ($userTxt -eq "q")
{
$EXITFLAG = 1
}
else
{
$userTxt >> $chatLog
}
}
Stop-Process $logRead.Id