返回首页

动态线程开始,暂停和停止事件处理:我已创建示例应用程序和执行线程。基本上旨在craete这个应用程序是我想

1。如果任何进程(S)runnig用户界面应通知[完成]
2。处理动态创建的线程与进度[完成]
3。提供另外的功能来启动,暂停和停止线程可用的进度列表。 [需要你的帮助] 注: - 关于线程和委托我没有多少知识,所以请让我知道最好的解决方案,为现有的代码

用于文件和控制: -
三个文件基本上都用在这个演示应用程序
1。 ProgressForm.cs(窗口表)
 0;,conatains创建取得新的进展和集装箱whic的按钮,将容纳所有的创造progressbars
2。 ProgressClass.cs
其中包含动态线程和代表通知用户界面没有锁定或悬挂的用户界面
3。 ProgressControl.cs(用户控制)
其中包含 进度(显示过程中完成) precent标签(显示完成进度的百分比) 开始/暂停按钮(播放/暂停一个线程) 停止按钮(停止正在运行的线程,从名单中删除的进展情况) 的STARTTIME标签(显示进程启动时) 结束时间标签(显示进程的时间内完成) MaxValue的LABLE(产生25至100之间的随机数)

代码片段: -

ProgressForm。CS

public partial class ProgressForm : Form

    {

        Random randomMaxValue = new Random();

        public ProgressForm()

        {

            InitializeComponent();

        }

 

        private void btnStart_Click(object sender, EventArgs e)

        {

             ProgressClass m_clsProcess;

             ProgressControl progress = new ProgressControl();

             progress.StartedAt = DateTime.Now;

             progress.MinValue = 0;

             progress.CurrentValue = 0;

             progress.MaxValue = randomMaxValue.Next(25, 100);

             AddControl(progress);

             m_clsProcess = new ProgressClass(progress, this, new ProgressClass.NotifyProgress(DelegateProgress));

             m_clsProcess.Start();

        }

        private void DelegateProgress(int CurrentValue, ProgressControl Progress)

        {

            ProgressBar p = (ProgressBar)Progress.Controls.Find("pgbPercent", false)[0];

            p.Minimum = Progress.MinValue;

            p.Value = CurrentValue;

            p.Maximum = Progress.MaxValue;

 

            Label percent = (Label)Progress.Controls.Find("lblPercent", false)[0];

            percent.Text = string.Format("{0:#00} %", Convert.ToInt16((CurrentValue * 100) / Progress.MaxValue));

 

            Label start = (Label)Progress.Controls.Find("lblStart", false)[0];

            start.Text = string.Format("{0:HH:mm:ss}", Progress.StartedAt);

 

            if (CurrentValue == Progress.MaxValue)

            {

                Label complete = (Label)Progress.Controls.Find("lblComplete", false)[0];

                complete.Text = string.Format("{0:HH:mm:ss}", DateTime.Now);

                Progress.Status = ProgressControl.ProgressStatus.Completed;

            }

 

            Label max = (Label)Progress.Controls.Find("lblMaxValue", false)[0];

            max.Text = string.Format("{0:#00}", Progress.MaxValue);

 

            Button btnstartstop = (Button)Progress.Controls.Find("btnStartStop", false)[0];

            btnstartstop.Click += new EventHandler(ProgressStartStop);

        }

        private void AddControl(Control ctl)

        {

            tableLayoutPnl.RowCount += 1;

            tableLayoutPnl.RowStyles.Add(new RowStyle());

            ctl.Dock = DockStyle.Fill;

            tableLayoutPnl.Controls.Add(ctl, 0, tableLayoutPnl.RowCount - 1);

        }

        void ProgressStartStop(object sender, EventArgs e)

        {

            Button btn = sender as Button;

            //

            //Here i would like to write a code for START / PAUSE thread and update Image acording too.

            //

        }

    }
ProgressControl.cs
{C}ProgressClass.cs
public class ProgressClass

{

    private int ThreadWaitTime = 100;

    private ProgressControl m_progress;

    private NotifyProgress m_clsNotifyDelegate;

    private System.Threading.Thread m_clsThread;

 

    private System.ComponentModel.ISynchronizeInvoke m_clsSynchronizingObject;

    public delegate void NotifyProgress(int PercentComplete, ProgressControl Progress);

 

    public ProgressClass(ProgressControl Progress, System.ComponentModel.ISynchronizeInvoke SynchronizingObject, NotifyProgress NotifyDelegate)

    {

        m_progress = Progress;

        m_clsSynchronizingObject = SynchronizingObject;

        m_clsNotifyDelegate = NotifyDelegate;

    }

 

    public void Start()

    {

        m_clsThread = new System.Threading.Thread(DoProcess);

        m_clsThread.Name = "Background Thread";

        m_clsThread.IsBackground = true;

        m_progress.Status = ProgressControl.ProgressStatus.Running;

        m_clsThread.Start();

    }

    private void DoProcess()

    {

        for (int i = m_progress.MinValue; i <= m_progress.MaxValue; i++)

        {

            NotifyUI(i);

            Thread.Sleep(ThreadWaitTime);

        }

    }

    private void NotifyUI(int Value)

    {

        object[] args = new object[2];

        args[0] = Value;

        args[1] = m_progress;

        m_clsSynchronizingObject.Invoke(m_clsNotifyDelegate, args);

    }

}

更新时间:
我不要求写完整的代码,而不是提供提示。

我想从列表开始/暂停洪鸿,杨凤池线程,操作系统应该怎样我该怎么办?

我想后在下面的函数:
&# 160; {体C3}谢谢,
imdadhusen

回答

评论会员: 时间:2