非常简单的聊天程序 - 更新聊天记录?

时间:2015-03-23 15:03:46

标签: powershell chat freeze

我做了一个非常简单的聊天程序。它只是将消息保存为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知识有限。

1 个答案:

答案 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