繁体   English   中英

具有TextChanged事件C#的WebClient DownloadString

[英]WebClient DownloadString with TextChanged Event C#

我在使用PHP脚本翻译单词并将结果字符串下载到TextBox C#程序中遇到麻烦。

我的程序有两个TextBoxes

txtWordtxtTranslatedWord

这是简化的代码

WebClient c = new WebClient();
private void txtWord_TextChanged(object sender, EventArgs e)
{
    string response = c.DownloadString("http://example.com/Services/Translator/lang/EnglishToArabic.php?Word=" + txtWord.Text);
    switch (response.ToLower())
    {
        case "not exist":
            {
                txtTranslatedWord.Text = "{Sorry but no translation for this word!}";
                break;
            }
        default:
            {
                txtTranslatedWord.Text = response;
                break;
            }
    }
}

问题是当文本更改时程序滞后,看起来像是“ 停止工作”

该程序成功运行,但滞后了很多,尤其是在编写者编写得如此快的情况下。

我尝试了BackgroundWorker并进行了延迟,例如当用户停止写2秒钟,然后程序开始翻译但仍然滞后而没有运气时。

有没有简单的方法可以做到这一点而没有问题?

尝试使用异步。

WebClient不支持并发I / O操作,因此将使用HttpClient

HttpClient client = new HttpClient();

private async void txtWord_TextChanged(object sender, EventArgs e)
{
    var response = await client.GetStringAsync(
        "http://example.com/Services/Translator/lang/EnglishToArabic.php?Word=" + txtWord.Text);
    switch (response.ToLower())
    {
        case "not exist":
            {
                txtTranslatedWord.Text = "{Sorry but no translation for this word!}";
                break;
            }
        default:
            {
                txtTranslatedWord.Text = response;
                break;
            }
    }
}

您的问题是您的用户在文本框中键入的每个字符都会导致WebClient下载,该下载必须在接受下一次按键之前完成。 我建议你做以下事情...

创建一个计时器,该计时器在用户每次输入字符时启动或重新启动,并且在到期时会禁用文本框并在重新启用文本框之前运行搜索。 使用异步WebClient调用也很不错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM