在C#中,如果你想在一个线程中执行另一个线程的操作,你可以使用Invoke
方法。Invoke
方法允许你在一个线程中安全地调用另一个线程的方法。这个方法通常用于在UI线程上执行操作,因为UI线程不能直接从非UI线程访问。
下面是一个简单的例子,展示了如何在C#中使用Invoke
进行回调:
using System;
using System.Threading;
using System.Windows.Forms;
public class MyForm : Form
{
private Button myButton;
public MyForm()
{
myButton = new Button();
myButton.Text = "Click me!";
myButton.Click += new EventHandler(myButton_Click);
this.Controls.Add(myButton);
}
private void myButton_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWork));
thread.Start();
}
private void DoWork()
{
// 这里是在另一个线程中执行的操作
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Thread {0}: {1}", Thread.CurrentThread.ManagedThreadId, i);
Thread.Sleep(100);
}
// 使用Invoke在UI线程上更新文本框
this.Invoke((MethodInvoker)delegate()
{
MessageBox.Show("Work done!");
});
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyForm());
}
}
在这个例子中,当用户点击按钮时,会启动一个新的线程来执行DoWork
方法。在DoWork
方法中,我们打印了一些消息并休眠了一会儿。然后,我们使用Invoke
方法在UI线程上显示一个消息框。注意,Invoke
方法需要一个MethodInvoker
委托,它表示要在UI线程上执行的操作。在这个例子中,我们使用了一个lambda表达式来创建一个匿名方法,并将其转换为MethodInvoker
委托。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。