C#高级形式”;请稍候”;

本文关键字:高级形 | 更新日期: 2023-09-27 18:27:40

我的表单将运行一些可能需要一段时间才能执行的代码。当操作在后台运行时,我想显示一条"请稍候"的消息。

我希望将该消息保存在一个表单中,这样我就可以从其他表单控制其可见性和文本。

我还希望它设置为从Program.cs文件开始。

我的代码,到目前为止:

namespace KAN
{
    public partial class prosze_czekac : Form
    {
        public prosze_czekac()
        {
            InitializeComponent();
        }
        private delegate void OffVisible();
        public void Wylacz()
        {
            if (this.InvokeRequired)
                this.Invoke(new OffVisible(Wylacz));
            else
                this.Visible = false;
        }
        delegate void SetTextCallback(string text);
        public void ZmienTekst(string text)
        {
            if (this.InvokeRequired)
            {
                //SetTextCallback d = new SetTextCallback(this.ZmienTekst);
                Invoke(new SetTextCallback(this.ZmienTekst), text);
                //Invoke(d, new object[] { text });
            }
            else
            {
                this.Visible = true;
                this.Text = text;
                this.lblKomunikat.Text = text;
                this.Update();
            }
        }
    }
}

我不知道如何运行表单,如何创建实例,以及如何编辑文本。所有这些都以任何形式,任何线索。上面的代码正确吗?如何正确使用它?

我是如何准备好表单"请稍候"的?我想现在在初始类(Program.cs)中打开它。在任何表单设计中使用它。样本代码,不知道是否正确:

namespace KAN
{
    static class Program
    {
        public static prosze_czekac PleaseWait;
        /// <summary>
        /// The main entry point for the application.
        /// </summary>        
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Thread thread = new Thread(new ThreadStart(PleaseWait.Show());
            PleaseWait.ZmienTekst("Please wait... Running the program");
            // long operation
            PleaseWait.Wylacz();
            Application.Run(new main());
        }
    }
}
namespace KAN
{
    public partial class main: Form
    {
        public main()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            // examples of long task in another form
            for (int i = 0; i < 5; i++)
            {
                Program.PleaseWait.ZmienTekst((i + 1).ToString());
                System.Threading.Thread.Sleep(1000);
            }
            Program.PleaseWait.Wylacz();
        }
    }
}

我第一次提问时,请耐心等待

PS"Wylacz"是"退出"(无效),意思是"隐藏",这样每次你都不会启动表单。"prosze_czekac"是"请稍候"。

C#高级形式”;请稍候”;

使用BackgroundWorker。下面的代码假设,您的表单中有一个按钮"button1",它执行worker,它在另一个线程上启动长时间运行的任务:

BackgroundWorker _worker;
// button click starts the execution of the lung running task on another thread
private void button1_Click(object sender, EventArgs e)
{
    label1.Visible = true; // show the label "please wait"
    _worker.RunWorkerAsync();
}
private void Form1_Load(object sender, EventArgs e)
{
    // initialize worker
    _worker = new BackgroundWorker();
    _worker.DoWork += new DoWorkEventHandler(worker_DoWork);
    _worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker_RunWorkerCompleted);
}
// executes when long running task has finished
void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // hide the label
    label1.Visible = false;
}
// is called by 'RunWorkerAsync' and executes the long running task on a different thread
void worker_DoWork(object sender, DoWorkEventArgs e)
{
    // long running task (just an example)
    for (int i = 0; i < 1000000000; i++)
    {
    }
}