永发信息网

关于几个 c# 多线程的问题

答案:1  悬赏:50  手机版
解决时间 2021-08-22 18:26
  • 提问者网友:浩歌待明月
  • 2021-08-21 17:45

 private void Form1_Load(object sender, EventArgs e)
        {
            Thread clientThread = new Thread(new ParameterizedThreadStart(ThreadFunc));
            clientThread.Start("datad");

        }
        private void ThreadFunc(object j)
        {
            Form2 f = new Form2();
            f.Show();
        }

我这样写 form2打开后立刻关闭

还有 就是 在线程中如何像textbox中赋值

最佳答案
  • 五星知识达人网友:不如潦草
  • 2021-08-21 19:04

关于第一个问题:


我们知道,一个程序运行叫做进程,其实这个进程本身对于系统来说就是一个线程。。。而多线程编程中,不同的线程占据不同的内存空间,因此你写的线程函数一旦运行完毕就会自动销毁,而Form2 f =new Form2在线程函数中定义,显然f这个对象是隶属于这个线程的,线程销毁则f也相应被销毁,从思路上解决,一种是设置这个Form2对象为一个全局的对象,不要再线程函数中创建;另一种是在f.show()之后必须等待用户某类操作才销毁,例如将f显示为模式窗体。


关于第二个问题:


这类问题在C#中常规的解决是用委托来进行的,示例如下:


private void button1_Click(object sender, EventArgs e)
{
    Thread th = new Thread(aa);
    th.Start();
}


delegate void doSomething();
private void aa()
{
    if (this.InvokeRequired)
    {
    doSomething ds= new doSomething(aa);
    this.Invoke(ds);
    return;
    }
    ShowChar('A');
}
public void ShowChar(char ch)
{
    lock (this)
    {
    textBox1.Text += ch;
    }
}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯