【问题标题】:Very Simple Chat Program - Updating Chat Log?非常简单的聊天程序 - 更新聊天记录?
【发布时间】:2015-03-23 15:03:46
【问题描述】:

我做了一个非常简单的聊天程序。它所做的只是将消息另存为 txt 文件中的新行,并将该 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 知识是有限的。

【问题讨论】:

    标签: powershell chat freeze


    【解决方案1】:

    您可以将写入和读取的进程与文件分开,而不是使用睡眠并检查整个文件是否有任何新写入。然后在读取过程中使用Get-Content -Path Chatfile.log -Tail 1 -Wait 的形式,每次更改聊天文件时都会返回一个新行。这显示了这个概念:

    $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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多