访问由另一个线程中的方法返回的值

本文关键字:方法 返回 另一个 线程 访问 | 更新日期: 2023-09-27 17:57:40

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

比方说:

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);
}
Label1.InvokeIfRequired(c => { c.Text = a; });

其中"a"是来自另一个线程的字符串或文本。