The*_*ask 7 .net c# multithreading invoke invokerequired
好吧,我正在编写一个对字符串,标签,链接标签,类等有用的扩展/方法文件.
但是,我有一个问题.我有一个showMessage()更改标签文本的方法,工作正常.但我决定使用线程执行,然后我这样做:
namespace LabelExtensions
{
public static class LabelExtensionsClass
{
private delegate void UpdateState();
public static void ShowMessage(this Label label, string text)
{
if (label.InvokeRequired)
{
label.Invoke((UpdateState)delegate
{
label.Text = text;
});
}
else
{
label.Text = text;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对不起,这是一个错字.我在论坛上输入了这段代码.错误继续.
根据文档,要使用Invoke方法需要导入:
命名空间: System.Windows.Forms
程序集: System.Windows.Forms(在System.Windows.Forms.dll中)
然后我做了:
using System.Windows.Forms;
Run Code Online (Sandbox Code Playgroud)
但是这会返回相同的错误:
The name 'Invoke' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
提前致谢.
为什么不这样做:
label.BeginInvoke( (Action) (() => label.Text = text));
Run Code Online (Sandbox Code Playgroud)
无需创建自己的委托.只需使用内置的Action委托.您可能应该为基本Control类而不是Label类创建扩展方法.它会更加可重复使用.
| 归档时间: |
|
| 查看次数: |
3028 次 |
| 最近记录: |