您好,登錄后才能下訂單哦!
在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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。