C#线程有多种方法

时间:2017-04-01 20:35:09

标签: c# multithreading

我正在制作一个管理图书馆的应用程序。目前我正在制作书籍研究的代码,我刚刚遇到了一个问题。我已经创建了一个处理此研究的线程,以及处理剩余执行的线程。我问自己,Thread有可能管理多种方法吗?如果是这样,你怎么能这样做,因为你只能在Thread的声明中放入一个方法。例如,当用户按下搜索按钮(在menubox中)时,我只希望应用程序(通过我的researchThread)转到url,运行goToUrl()方法。然后,当用户按下搜索按钮时(在写完书的keyWord之后),我希望同一个线程运行另一个方法(search()方法)。因为我不想为每个功能创建一千个线程(并且我认为这不是正确的解决方案),我该如何处理这种情况?提前谢谢。

1 个答案:

答案 0 :(得分:2)

使用Task类而不是线程。不必要地防止使用线程。使用Tasks将运行代码异步。您还可以使用Async and Await个关键字。

    public void Start()
    {
        //Create Task with parameter
        Task search = new Task(() => new Action<int>(SomeSearchMethod)(4));

        // Create Normal Task
        Task download = new Task(SomeDownloadMethod);

        // Create Task with Return value            
        Task<string> proccessString = Task.FromResult(SomeProcessing());
        MessageBox.Show(proccessString.Result);

        // Start Task
        search.Start();
        download.Start();

        // Wait untill task finisht
        search.Wait();
        download.Wait();
        /* or for both tasks*/
        Task.WaitAll(); 
    }

    private void SomeDownloadMethod()
    {
        //logic
    }

    private void SomeSearchMethod(int value)
    {
        MessageBox.Show("Parameter Search" + value.ToString());
    }

    private string SomeProcessing()
    {
        return "Proccess";
    }