Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/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
C# 需要C语言帮助#需要实现移动图片框_C#_Multithreading - Fatal编程技术网

C# 需要C语言帮助#需要实现移动图片框

C# 需要C语言帮助#需要实现移动图片框,c#,multithreading,C#,Multithreading,我需要你的帮助 共有3个图片框,红色应向左扩展其宽度,绿色应向右扩展其高度至顶部蓝色的宽度 此外,如果到达上边框/任何文本框,则应显示错误/停止执行 我需要在将来添加更多的图片框,如果其中两个发生冲突,应该会出现错误/停止执行。我已经设法将它们编码为上升,但是无法让其他函数工作。请找个人帮我做这个 或 多谢各位。 RR 下面是我的代码 using System; using System.Collections.Generic; using System.ComponentModel; usi

我需要你的帮助

共有3个图片框,红色应向左扩展其宽度,绿色应向右扩展其高度至顶部蓝色的宽度

此外,如果到达上边框/任何文本框,则应显示错误/停止执行

我需要在将来添加更多的图片框,如果其中两个发生冲突,应该会出现错误/停止执行。我已经设法将它们编码为上升,但是无法让其他函数工作。请找个人帮我做这个

多谢各位。 RR

下面是我的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace ThreadwithmovingPicbxmoving
{
    public partial class Form1 : Form
    {
        Thread t1;
        Thread t2;
        Thread t3;

        delegate void CTMethod(int val);
        delegate void CTFinish(string t);
        Queue<string> order = new Queue<string>();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int r = int.Parse(textBox1.Text);
            int y = int.Parse(textBox2.Text);
            int g = int.Parse(textBox3.Text);

            t1 = new Thread(new ParameterizedThreadStart(loopred));
            t2 = new Thread(new ParameterizedThreadStart(loopyel));
            t3 = new Thread(new ParameterizedThreadStart(loopGree));

            t1.Start(r);
            t2.Start(y);
            t3.Start(g);

        }
        private void updateRed(int val)
        {
            pictureBox1.Height = val;
            pictureBox1.Refresh();
        }

        private void updateyell(int val)
        {
            pictureBox2.Height = val;
            pictureBox2.Refresh();
        }
        private void updategree(int val)
        {
            pictureBox3.Height = val;
            pictureBox3.Refresh();

        }

        private void loopred(object o)
        {
            int c = (int)o;
            CTMethod ctred = new CTMethod(updateRed);
            if (c < 500)
            {
                for (int i = 0; i < c; i++)
                {
                    this.Invoke(ctred, i);
                    Thread.Sleep(20);
                }
            }

            else
            {
                MessageBox.Show("Enter a value less than 500 for Red Box!!!");
            }
            CTFinish CTFin = new CTFinish(Threadfinish);
            this.Invoke(CTFin, "Red");
        }

        private void loopyel(object o)
        {
            int c = (int)o;
            CTMethod ctyell = new CTMethod(updateyell);
            if (c < 500)
            {
                for (int i = 0; i < c; i++)
                {
                    this.Invoke(ctyell, i);
                    Thread.Sleep(20);
                }
            }
            else
            {
                MessageBox.Show("Enter a valure less than 500 for Yellow Box!!!");
            }
            CTFinish CTFin = new CTFinish(Threadfinish);
            this.Invoke(CTFin, "Yell");
        }


        private void loopGree(object o)
        {
            int c = (int)o;
            CTMethod ctgree = new CTMethod(updategree);
            if (c < 500)
            {
                for (int i = 0; i < c; i++)
                {
                    this.Invoke(ctgree, i);
                    Thread.Sleep(20);
                }
            }
            else
            {
                MessageBox.Show("Enter a valure less than 500 for Green Box!!!");
            }
            CTFinish CTfin = new CTFinish(Threadfinish);
            this.Invoke(CTfin, "Green");

        }

        private void Threadfinish(string t)
        {
            order.Enqueue(t);
            if (order.Count == 3)
            {

                MessageBox.Show("Threads finished in this order: \n" + "1." + order.Dequeue() + "\n" + "2." + order.Dequeue()
                    + "\n" + "3." + order.Dequeue() + "\n", "finished");

            }
        }

    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用系统线程;
命名空间ThreadwithmovingPicbxmoving
{
公共部分类Form1:Form
{
螺纹t1;
螺纹t2;
螺纹t3;
委托方法(int val);
委托无效CTFinish(字符串t);
队列顺序=新队列();
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
int r=int.Parse(textBox1.Text);
int y=int.Parse(textBox2.Text);
int g=int.Parse(textBox3.Text);
t1=新线程(新的参数化线程启动(loopred));
t2=新线程(新的参数化线程启动(loopyel));
t3=新线程(新的参数化线程启动(loopGree));
t1.启动(r);
t2.开始(y);
t3.启动(g);
}
私有无效更新(int val)
{
pictureBox1.高度=val;
pictureBox1.Refresh();
}
私有void updatel(int val)
{
pictureBox2.高度=val;
pictureBox2.Refresh();
}
私有void updategree(int val)
{
pictureBox3.高度=val;
pictureBox3.Refresh();
}
私有void loopred(对象o)
{
int c=(int)o;
CTMethod ctred=新CTMethod(更新);
如果(c<500)
{
对于(int i=0;i
试试看。有三个画框就可以了

使用名称帮助创建新的Widows应用程序,然后用以下代码替换Form1.cs代码

运行它。它还包括来自文本框的值

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using System.Collections.Generic;


namespace help
{
public partial class Form1 : Form
{

    Thread t1;
    Thread t2;
    Thread t3;

    delegate void CTMethod(int val);
    delegate void CTFinish(string t);
    Queue<string> order = new Queue<string>();


    #region Variables of Designer File
    private System.Windows.Forms.PictureBox pictureBox1;
    private System.Windows.Forms.PictureBox pictureBox2;
    private System.Windows.Forms.PictureBox pictureBox3;
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.TextBox textBox2;
    private System.Windows.Forms.TextBox textBox3;
    private System.Windows.Forms.Button button1;
    #endregion


    public Form1()
    {
        #region Designer Code I have Cut and Pasted Here
        this.pictureBox1 = new System.Windows.Forms.PictureBox();
        this.pictureBox2 = new System.Windows.Forms.PictureBox();
        this.pictureBox3 = new System.Windows.Forms.PictureBox();
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.textBox2 = new System.Windows.Forms.TextBox();
        this.textBox3 = new System.Windows.Forms.TextBox();
        this.button1 = new System.Windows.Forms.Button();
        ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
        ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
        ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
        this.SuspendLayout();
        this.Controls.Add(this.button1);
        this.Controls.Add(this.textBox3);
        this.Controls.Add(this.textBox2);
        this.Controls.Add(this.textBox1);
        this.Controls.Add(this.pictureBox3);
        this.Controls.Add(this.pictureBox2);
        this.Controls.Add(this.pictureBox1);

        // 
        // pictureBox1
        // 
        this.pictureBox1.BackColor = System.Drawing.Color.Red;
        this.pictureBox1.Location = new System.Drawing.Point(161, 268);
        this.pictureBox1.Name = "pictureBox1";
        this.pictureBox1.Size = new System.Drawing.Size(100, 50);
        this.pictureBox1.TabIndex = 0;
        this.pictureBox1.TabStop = false;
        // 
        // pictureBox2
        // 
        this.pictureBox2.BackColor = System.Drawing.Color.Green;
        this.pictureBox2.Location = new System.Drawing.Point(383, 268);
        this.pictureBox2.Name = "pictureBox2";
        this.pictureBox2.Size = new System.Drawing.Size(100, 50);
        this.pictureBox2.TabIndex = 1;
        this.pictureBox2.TabStop = false;
        // 
        // pictureBox3
        // 
        this.pictureBox3.BackColor = System.Drawing.Color.Blue;
        this.pictureBox3.Location = new System.Drawing.Point(605, 268);
        this.pictureBox3.Name = "pictureBox3";
        this.pictureBox3.Size = new System.Drawing.Size(100, 50);
        this.pictureBox3.TabIndex = 2;
        this.pictureBox3.TabStop = false;
        // 
        // textBox1
        // 
        this.textBox1.Location = new System.Drawing.Point(161, 26);
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(100, 20);
        this.textBox1.TabIndex = 3;
        // 
        // textBox2
        // 
        this.textBox2.Location = new System.Drawing.Point(383, 25);
        this.textBox2.Name = "textBox2";
        this.textBox2.Size = new System.Drawing.Size(100, 20);
        this.textBox2.TabIndex = 4;
        // 
        // textBox3
        // 
        this.textBox3.Location = new System.Drawing.Point(605, 26);
        this.textBox3.Name = "textBox3";
        this.textBox3.Size = new System.Drawing.Size(100, 20);
        this.textBox3.TabIndex = 5;
        // 
        // button1
        // 
        this.button1.Location = new System.Drawing.Point(37, 23);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(75, 23);
        this.button1.TabIndex = 6;
        this.button1.Text = "Go";
        this.button1.UseVisualStyleBackColor = true;
        this.button1.Click += new System.EventHandler(this.button1_Click);
        this.PerformLayout();
        #endregion

        InitializeComponent();

        textBox1.Text = "490";
        textBox2.Text = "490";
        textBox3.Text = "490";

        textBox1.Leave += new EventHandler(textBox1_Leave);
        textBox2.Leave += new EventHandler(textBox2_Leave);
        textBox3.Leave += new EventHandler(textBox3_Leave);
    }

    // To input Only Valid int values in TextBoxes
    #region TextBoxes Input Validation
    int t1Val = 490;
    int t2Val = 490;
    int t3Val = 490;
    void textBox1_Leave(object sender, EventArgs e)
    {
        try
        {
            int t1Val = Convert.ToInt32(textBox1.Text);
        }
        catch
        {
            textBox1.Focus();
        }
    }
    void textBox2_Leave(object sender, EventArgs e)
    {
        try
        {
            int t2Val = Convert.ToInt32(textBox2.Text);
        }
        catch
        {
            textBox2.Focus();
        }
    }
    void textBox3_Leave(object sender, EventArgs e)
    {
        try
        {
            int t3Val = Convert.ToInt32(textBox3.Text);
        }
        catch
        {
            textBox3.Focus();
        }
    }
    #endregion

    private void button1_Click(object sender, EventArgs e)
    {
        int r = t1Val;
        int y = t2Val;
        int g = t3Val;

        t1 = new Thread(new ParameterizedThreadStart(loopRed));
        t2 = new Thread(new ParameterizedThreadStart(loopGreen));
        t3 = new Thread(new ParameterizedThreadStart(loopBlue));

        // It will avoid proble if you exit app when threads are working
        t1.IsBackground = true;
        t2.IsBackground = true;
        t3.IsBackground = true;


        t1.Start(r);
        t2.Start(y);
        t3.Start(g);

    }
    private void updateRed(int val)
    {
        pictureBox1.Width++;
        pictureBox1.Left--;
        pictureBox1.Refresh();
    }

    private void updateGreen(int val)
    {
        pictureBox2.Height++;
        pictureBox2.Top--;
        pictureBox2.Refresh();
    }
    private void updateBlue(int val)
    {
        pictureBox3.Width++;
        pictureBox3.Refresh();
    }

    private void loopRed(object o)
    {
        int c = (int)o;
        CTMethod ctRed = new CTMethod(updateRed);
        if (c < 500)
        {
            for (int i = 0; i < c; i++)
            {
                if (pictureBox1.Left > 0)
                {
                    this.Invoke(ctRed, i);
                    Thread.Sleep(20);
                }
            }
        }

        else
        {
            MessageBox.Show("Enter a value less than 500 for Red Box!!!");
        }
        CTFinish CTFin = new CTFinish(Threadfinish);
        this.Invoke(CTFin, "Red");
    }

    private void loopGreen(object o)
    {
        int c = (int)o;
        CTMethod ctGreen = new CTMethod(updateGreen);
        if (c < 500)
        {
            for (int i = 0; i < c; i++)
            {                    
                if (pictureBox2.Top > 0 && pictureBox2.Top != textBox2.Top + textBox2.Height)
                {
                    this.Invoke(ctGreen, i);
                    Thread.Sleep(20);
                }
                else
                    break;
            }
        }
        else
        {
            MessageBox.Show("Enter a valure less than 500 for Green Box!!!");
        }
        CTFinish CTFin = new CTFinish(Threadfinish);
        this.Invoke(CTFin, "Green");
    }


    private void loopBlue(object o)
    {
        int c = (int)o;
        CTMethod ctBlue = new CTMethod(updateBlue);
        if (c < 500)
        {
            for (int i = 0; i < c; i++)
            {
                if (pictureBox3.Left + pictureBox3.Width < this.Width)
                {
                    this.Invoke(ctBlue, i);
                    Thread.Sleep(20);
                }
                else
                    break;
            }
        }
        else
        {
            MessageBox.Show("Enter a valure less than 500 for Blue Box!!!");
        }
        CTFinish CTfin = new CTFinish(Threadfinish);
        this.Invoke(CTfin, "Blue");

    }

    private void Threadfinish(string t)
    {
        order.Enqueue(t);
        if (order.Count == 3)
        {

            MessageBox.Show("Threads finished in this order: \n" + "1." + order.Dequeue() + "\n" + "2." + order.Dequeue()
                + "\n" + "3." + order.Dequeue() + "\n", "finished");

        }
    }

}
}
使用系统;
使用系统图;
使用系统线程;
使用System.Windows.Forms;
使用System.Collections.Generic;
名称空间帮助
{
公共部分类Form1:Form
{
螺纹t1;
螺纹t2;
螺纹t3;
委托方法(int val);
委托无效CTFinish(字符串t);
队列顺序=新队列();
#设计器文件的区域变量
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.PictureBox pictureBox3;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Button按钮1;
#端区
公共表格1()
{
#我在这里剪切并粘贴的区域设计器代码
this.pictureBox1=新系统.Windows.Forms.PictureBox();
this.pictureBox2=新系统.Windows.Forms.PictureBox();
this.pictureBox3=新系统.Windows.Forms.PictureBox();
this.textBox1=new System.Windows.Forms.TextBox();
this.textBox2=new System.Windows.Forms.TextBox();
this.textBox3=new System.Windows.Forms.TextBox();
this.button1=new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
这个.SuspendLayout();
this.Controls.Add(this.button1);
这是骗局