Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Visual studio 2010 如何在windows窗体中不阻塞循环_Visual Studio 2010_Visual C++_.net 4.0 - Fatal编程技术网

Visual studio 2010 如何在windows窗体中不阻塞循环

Visual studio 2010 如何在windows窗体中不阻塞循环,visual-studio-2010,visual-c++,.net-4.0,Visual Studio 2010,Visual C++,.net 4.0,我对.net编程相当陌生,我想得到一些建议。 我正在尝试使用VS2010设计器创建一个简单的客户端GUI应用程序,以创建一个表单,其中我有: 1个组合框(包含可能的命令列表) 1按钮,(用于执行组合框中选择的命令) 1个picturebox(其中显示从服务器应用程序接收的图像) 我能够创建我的客户端应用程序,并在每次按下按钮时从服务器接收的picturebox中显示不同的图像 我想做的是在事件按钮单击中创建一个不阻塞循环,这样,只要客户机combobox命令设置为开始成像,服务器发送的图像就会显

我对.net编程相当陌生,我想得到一些建议。 我正在尝试使用VS2010设计器创建一个简单的客户端GUI应用程序,以创建一个表单,其中我有: 1个组合框(包含可能的命令列表) 1按钮,(用于执行组合框中选择的命令) 1个picturebox(其中显示从服务器应用程序接收的图像) 我能够创建我的客户端应用程序,并在每次按下按钮时从服务器接收的picturebox中显示不同的图像

我想做的是在事件按钮单击中创建一个不阻塞循环,这样,只要客户机combobox命令设置为开始成像,服务器发送的图像就会显示在picturebox中,当客户机combobox命令设置为停止成像时,它就会停止

我不知道该怎么做,因为如果我尝试在事件按钮单击中循环,GUI将变得无响应,并且我没有机会更改组合框中的命令

任何帮助都将不胜感激。 谢谢。

这里有一种“便宜”的方法,通过使用BackgroundWorker类的ReportProgress功能来更新GUI。首先在表单上放置BackgroundWorker对象。然后

private void Form1_Load(object sender, EventArgs e)
{
    backgroundWorker1.DoWork += DoWork;          
    backgroundWorker1.ProgressChanged += UpdateGui;
    backgroundWorker1.WorkerReportsProgress = true;
    backgroundWorker1.RunWorkerAsync();
}

private void DoWork(object sender, DoWorkEventArgs e)
{
    while (true)
    {
        System.Threading.Thread.Sleep(1000);
        backgroundWorker1.ReportProgress(0);
    }          
}
void UpdateGui(object sender, ProgressChangedEventArgs e)
{
    textBox1.Text = DateTime.Now.ToLongTimeString();
}

显示一些相关代码。您可能使用了错误的控件进行选择(为什么是组合框??)。要解决某些问题,我们需要知道在哪里解决;)嗨,我能够通过使用不同的线程实现一个非阻塞循环。我有一个EthThread,其中客户端向服务器请求/接收数据,每次接收到imagePacket时,都会调用PictureRefresh()方法。