首页 > 解决方案 > 如果值在另一个线程中,如何设置属性

问题描述

我想设置一个值在另一个线程中的属性

[DllExport]
public static bool Value()
{
    bool val = false;
    Thread thread = new Thread(async () => val = await getVal());
    thread.IsBackground = true;
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    return val;
}

public async Task<bool> getVal()
{
    bool value = false;
    await Task.Factory.StartNew(() =>
    {
        string rs = new WebClient().DownloadString(url);
        if (rs == "1")
            value = true;
        else
            value = false;
    });
    return value;

}

它总是返回false为什么我使用那个我不能在静态 [DLLExport] 方法中使用等待,否则表单将冻结。

编辑:我不能在 DllExport 方法中使用异步

标签: c#

解决方案


好吧,启动线程确实不会告诉您代码何时运行。

调用 .Start() 后,您告诉线程运行其代码,但您无法真正控制操作系统何时决定实际让代码运行。

我也不确定在另一个线程范围内使用本地定义的变量实际上是如何工作的,但我发现很难想象你可以像你试图做的那样设置值。

尝试谷歌搜索 Monitor.Wait(), Monitor.Pulse() 可用于让一个线程等待另一个线程完成(一个调用 Monitor.Wait() ,另一个调用 Monitor.Pulse() 当它想要等待线程时开始执行)。


推荐阅读