c# - 访问另一个线程中的方法返回的值

标签 c# multithreading return-value

如何访问在另一个线程中运行的方法返回的值?

可以说:

public string[,] method1
{
    string a = "blah";
    return a;
}

private void btn_Click(object sender, EventArgs e)
{
    Thread thread = new Thread(method1);
    thread.Start();

    // here I want to use a ...
    Label1.Text = a;
}

谁能告诉我?

最佳答案

为什么不,

public Task<string> Method1()
{
    return Task.Run(() => "blah");
}

private async void btn_Click(object sender, EventArgs e)
{
    Label1.Text = await Method1();
}

或者,如果函数带有参数,
public Task<string> Method1(string someString, int someInt)
{
    return Task.Run(() => string.Format("{0}{1}", someString, someInt));
}

private async void btn_Click(object sender, EventArgs e)
{
    Label1.Text = await Method1("EZ", 1);
}

甚至,
private Task<string[][]> ArrayMaker(uint x, uint y)
{
    return Task.Run(() =>
    {
        var result = new string[x][]
        for (var i = 0; i < x; i++)
        {
            result[i] = new string[y];
            for (var j = 0; j < y; j++)
            {
                result[i][j] = ((long)i * j).ToString(
                    CultureInfo.InvariantCulture);
            }
        }

        return result;
    });
}


private async void btn_Click(object sender, EventArgs e)
{
    var bigArray = await ArrayMaker(1000000, 1000000);
}

关于c# - 访问另一个线程中的方法返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965871/

相关文章:

python - QObject::setParent:无法设置父级,新父级位于Python中的不同线程中

javascript - 如何在 Javascript 中执行线程

c# - 在 catch block 中返回空列表

python - 如何确定函数调用实际使用哪些返回值?

bash - 在上一个命令失败后创建带有红色 $ 的 Bash 命令提示符

c# - 为什么我不能执行 ExecuteNonQuery()?

c# - 是否可以在 native x64 程序集中使用 iSpring Presenter 组件?

c# - MySql 查询没有返回预期的数据

c# - 如何编写没有 Lambda 表达式的函数?

java - 比尔·普格·辛格顿(Bill Pugh Singleton),为什么线程安全?