2
new System.Threading.Thread(() =>
    {
        var myObject = new CustomObject();
        myObject.SomeEvent += SomeMethod;
    }).Start();

パート1: winformsアプリケーションのメインUIスレッドで上記のコードを実行するとします。どちらのThread呼び出しがSomeMethod発生しますか?Threadオブジェクトを作成したときに作成されたものと同じもので発生しますか?

パート2: Visual Studio 2010を使用して、これを自分で理解するにはどうすればよいですか?Thread何が実行されているのか、どこでわかるのかわかりません。

4

4 に答える 4

9

イベントハンドラーSomeMethodは、イベントを発生させたスレッドで実行されます。

イベントハンドラーでブレークポイントを設定しSomeMethod、[スレッド]ウィンドウを確認できます(スレッドを見つけるために、スレッドに意味のある名前を付けることをお勧めします)。

于 2012-09-18T14:25:54.280 に答える
2

現在実行しているスレッドを見つけるには、を使用できますThread.CurrentThread.ManagedThreadId

質問に答えるには:SomeMethodは、イベントを発生させるスレッドで実行されます。

あなたの場合、メソッドをイベントに割り当てるときに実際に実行されることはありませんが、実際にイベントを発生させることはありません。

于 2012-09-18T14:26:33.013 に答える
0

ManagedThreadIdプロパティを確認できますhttp://msdn.microsoft.com/en-us/library/system.threading.thread.managedthreadid.aspx

@Mikeこれがサンプルです

        Console.WriteLine("Main New Thread : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);

        new System.Threading.Thread(() =>
        {
            Console.WriteLine("Inside New Thread : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
        }).Start();

        Console.WriteLine("Main New Thread : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
于 2012-09-18T14:37:05.843 に答える
0

ハンドラーが実行されるスレッドをチェックできるようにする簡単なテストを追加したかっただけです。

class Test
{
    delegate void update();
    static event update updateEvent;

    static void Main(string[] args)
    {
        Console.WriteLine("Parent thread: " + Thread.CurrentThread.ManagedThreadId);
        updateEvent += new update(Test_updateEvent);
        var t = new Thread(
            () =>
            {
                Console.WriteLine("Child thread: " + Thread.CurrentThread.ManagedThreadId);
                updateEvent();
            });
        t.Start();
        t.Join();
    }

    static void Test_updateEvent()
    {
        Console.WriteLine("Event thread: " + Thread.CurrentThread.ManagedThreadId);
    }
}

印刷するもの:

Parent thread: 1
Child thread: 3
Event thread: 3
于 2012-09-18T15:14:53.920 に答える