相关疑难解决方法(0)

为什么必须在作为普通的Delegate参数提供时转换lambda表达式

采取方法System.Windows.Forms.Control.Invoke(Delegate方法)

为什么会出现编译时错误:

string str = "woop";
Invoke(() => this.Text = str);
// Error: Cannot convert lambda expression to type 'System.Delegate'
// because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)

但这很好用:

string str = "woop";
Invoke((Action)(() => this.Text = str));
Run Code Online (Sandbox Code Playgroud)

当方法需要普通代表时?

c# lambda delegates c#-3.0

120
推荐指数
3
解决办法
6万
查看次数

在C#中调用BeginInvoke/Invoke时如何获取返回值

我有这个小方法应该是线程安全的.一切正常,直到我希望它具有回报价值而不是虚空.如何在调用BeginInvoke时获得返回值?

public static string readControlText(Control varControl) {
        if (varControl.InvokeRequired) {
            varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
        } else {
            string varText = varControl.Text;
             return varText;
        }

    }
Run Code Online (Sandbox Code Playgroud)

编辑:我想在这种情况下让BeginInvoke不是nessecary,因为我需要来自GUI的值才能继续线程.所以使用Invoke也很好.只是不知道如何在以下示例中使用它来返回值.

private delegate string ControlTextRead(Control varControl);
    public static string readControlText(Control varControl) {
        if (varControl.InvokeRequired) {
            varControl.Invoke(new ControlTextRead(readControlText), new object[] {varControl});
        } else {
            string varText = varControl.Text;
             return varText;
        }

    }
Run Code Online (Sandbox Code Playgroud)

但不知道如何使用该代码获得价值;)

.net c# multithreading invoke begininvoke

39
推荐指数
2
解决办法
6万
查看次数

你可以从另一个线程访问UI元素吗?(没有设定)

我在google/here上看到很多线程在UPDATING来自另一个线程的UI元素.

如果我想获得复选框的值,该怎么办?

我能不做任何特别的事情吗?

c# wpf multithreading

19
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×3

multithreading ×2

.net ×1

begininvoke ×1

c#-3.0 ×1

delegates ×1

invoke ×1

lambda ×1

wpf ×1