Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WebClient DownloadString与TextChanged事件C#_C#_.net_Winforms_Webclient_Downloadstring - Fatal编程技术网

WebClient DownloadString与TextChanged事件C#

WebClient DownloadString与TextChanged事件C#,c#,.net,winforms,webclient,downloadstring,C#,.net,Winforms,Webclient,Downloadstring,我在C#程序中遇到问题,该程序使用php脚本翻译单词并将结果字符串下载到TextBox 我的程序有两个文本框 txtWord,txtTranslatedWord 这就是简化的代码 WebClient c = new WebClient(); private void txtWord_TextChanged(object sender, EventArgs e) { string response = c.DownloadString("http://example.com/Service

我在C#程序中遇到问题,该程序使用php脚本翻译单词并将结果字符串下载到
TextBox

我的程序有两个文本框

txtWord
txtTranslatedWord

这就是简化的代码

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下载,必须在下一次按键被接受之前完成下载。我建议你做以下事情


创建一个计时器,该计时器在用户每次输入字符时启动或重新启动,并在过期时禁用文本框并在重新启用文本框之前运行搜索。您还可以使用异步WebClient调用

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

创建一个计时器,该计时器在用户每次输入字符时启动或重新启动,并在过期时禁用文本框并在重新启用文本框之前运行搜索。您还可以使用异步WebClient调用

尝试使用异步

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
不支持并发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;
            }
    }
}

我很困惑,你想把“php”代码转换成“c”?很抱歉耽搁了回答是的是WinForms吗?是的WinForms我很困惑,你想把“php”代码转换成“c”#吗?很抱歉延迟了答案是:是的是WinForms吗?是的,WinForms我已经做到了,除了async,但我想用任何方法来停止像BackgroundWorker一样的滞后,但我遇到了一个例外,我的意思是我不想让用户感觉到程序中发生了什么,比如下载或任何…所以如果你有一个解决方案代码你可以发布一个例子吗?我已经做了,除了异步,但我想用任何方法来停止像BackgroundWorker一样的滞后,但我做了一个例外,我的意思是我不想让用户感觉到程序中发生了什么,比如下载或任何…所以如果你有一个解决方案代码,你可以发布一个例子吗?这解决了一半的问题问题-gui响应性问题。它没有解释的是,你不想在用户输入的每个字符之后打网络电话——你想预测他们何时完成输入。这个解决方案实际上可以返回不确定的结果——对部分单词的调用可以在对整个单词的调用之后完成。我已经知道了,这就是我说的原因(简化代码)我只想用任何方法快速获取数据而不延迟,但感谢您的想法^^这解决了一半的问题-gui响应问题。它没有解释的是,你不想在用户输入的每个字符之后打网络电话——你想预测他们何时完成输入。这个解决方案实际上可以返回不确定的结果——调用一个部分单词可能会在整个单词的一个之后完成。我已经知道了这一点,这就是为什么我说(简化代码)我只想以任何方式快速获取数据而不延迟,但感谢您的想法^^