我是C#的新手,無法搞清楚如何將事件從線程傳遞到GUI窗體線程。任何幫助,將不勝感激。我發現的所有例子都太複雜了。我只想從處理GUI的一個事件開始,然後讓GUI做一些事情(現在,任何事情)。如何將單個事件從線程傳遞到GUI窗體線程?
namespace testEvents
{
public delegate void StuffHappenedDel(MessageEventArgs e);
public partial class Form1 : Form
{
workerThread thread;
int j = 0;
public Form1()
{
InitializeComponent();
thread = new workerThread();
thread.Start();
}
private void button1_Click(object sender, EventArgs e)
{
thread.Stop();
}
private void StuffHappenedDel(Object seder, EventArgs e)
{
j++;
}
}
public class workerThread
{
Thread worker;
private bool _quit = false;
/* I don't think this next line is correct*/
public event StuffHappenedDel StuffHappened;
protected virtual void OnStuffHappened(MessageEventArgs e)
{
if (StuffHappened != null)
StuffHappened(e);
}
public void Start()
{
ThreadStart start = new ThreadStart(Run);
worker = new Thread(start);
worker.Start();
}
private void Run()
{
int i = 0;
while (!_quit)
{
Thread.Sleep(1000);
i++;
OnStuffHappened(new MessageEventArgs(false, "it worked!"));
Console.WriteLine(string.Format("Slept {0} seconds.",i));
}
Console.WriteLine("Thread exiting");
}
}
public class MessageEventArgs : EventArgs
{
public MessageEventArgs(bool Error, string message)
{
IsError = Error;
Message = message;
}
public bool IsError { get; set; }
public string Message { get; set; }
}
}
謝謝你的快速反應。以後我會考慮BackgrounWorkers。目前,我想將一個來自通用線程的事件傳遞迴GUI窗體。儘管你的代碼塊stil並沒有向我解釋。我對csharp非常陌生。我假設你的代碼會在GUI代碼中上升,但是如何在線程中觸發事件? – Bob
我已更新帖子,希望有所幫助。你缺少的關鍵是附加的事件處理程序。主要要注意的是,即使UI線程設置了事件處理程序,工作實際上是在後臺線程上完成的。 – keyboardP
@keyboardP先生你可以請看看我的問題:[http:// stackoverflow。COM /問題/ 14198145/Windows的手機-7-如何對通知-數據被更新的功能於列表框(http://stackoverflow.com/questions/14198145/windows-phone-7-how-to -notify-數據被更新的功能於列表框) –