前言

  • 上一篇文章讲到了关于C#中的跨线程winform控件操作,但是涉及到的线程都是不含参数的,本篇就讲解含参数的情况。

正文

不含参数

  • 既然提到参数,就把不含参数的情况也加进来吧,
private void childThreadWillRun(){...}//这是子线程要运行的函数,不含参数

private void startChildThread()
{
    Thread childThread = new Thread(new ThreadStart(childThreadWillRun));
    childThread.Start();
}
  • 可以看到,我们这里创建新线程的时候,使用的是ThreadStart直接创建了一个子线程并开始调用相应函数

含一个参数

  • 如果创建子线程的时候,我们需要传递一个参数值呢?此时我们就要用到另一个关键字ParameterizedThreadStart
  • 这个关键字用于创建含一个参数的子线程,且传递时,被调用函数的形参只能是object
private void childThreadWillRun(object value){...}//带有一个参数的函数

private void startChildThread()
{
    Thread childThread = new Thread(new ParameterizedThreadStart(childThreadWillRun));
    childThread.Start(value);
}
  • 参数在子线程启动的时候进行传递

含有一个以上的参数

  • 上一段讲了含一个参数的情况,那如果含有多个参数呢,这时候ParameterizedThreadStart可就不起作用了。
  • 但是如果需要,我们也是可以做到使用多个参数的。
  • 我们可以创建一个class,这个class包含我们需要的几个静态变量
class myVariable
{
    public static string variableA,variableB,variableC;//假设为string型的变量
}
  • 这样,我们在程序运行时可以new一个对象出来,将需要的变量进行赋值
myVariable mine = new myVariable();
mine.variableA = 'abc';
mine.variableB = 'def';
mine.variableC = '123';
  • 这样,我们在创建子线程的时候依然可以使用不含参数的方式进行创建,在需要用到参数的时候,直接调用mine.variableA等就可以了,如果出现了不允许跨线程操作的情况,可以按照上一篇中所讲,解除跨线程检测即可。

  • 我的文章对你有帮助吗,喜欢的话不妨打赏一下吧!