1

イベントを使用して 2 つのスレッド間で通信する最初のアプリケーションを作成しようとしています。代表者とのやり取りがよくわからないので、申請書の書き方と間違いは何か (もしあれば) アドバイスが必要ですか?

私は2つのクラスを使用しています。2 つのスレッドを含むクラス 1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

public class MyThreadTest : EventArgs
{
private string _threadOutput = "";
private bool _stopThreads = false;


            /// <summary>
            /// Thread 1: Loop continuously,
            /// Thread 1: Displays that we are in thread 1
            /// </summary>
            void DisplayThread1()
            {

                  while (_stopThreads == false)
                  {
                        Console.WriteLine("Display Thread 1");

                        // Assign the shared memory to a message about thread #1
                        _threadOutput = "Hello Thread1";


                        Thread.Sleep(1000);  // simulate a lot of processing 

                        // tell the user what thread we are in thread #1, and display shared memory
                        Console.WriteLine("Thread 1 Output --> {0}", _threadOutput);



                  }
            }



            /// <summary>
            /// Thread 2: Loop continuously,
            /// Thread 2: Displays that we are in thread 2
            /// </summary>
            void DisplayThread2()
            {
                  while (_stopThreads == false)
                  {
                    Console.WriteLine("Display Thread 2");


                   // Assign the shared memory to a message about thread #2
                    _threadOutput = "Hello Thread2";


                    Thread.Sleep(1000);  // simulate a lot of processing

                   // tell the user we are in thread #2
                    Console.WriteLine("Thread 2 Output --> {0}", _threadOutput);


                  }
            }



            void CreateThreads()
            {
                // construct two threads for our demonstration;
                Thread thread1 = new Thread(new ThreadStart(DisplayThread1));
                Thread thread2 = new Thread(new ThreadStart(DisplayThread2));

                // start them
                thread1.Start();
                thread2.Start();
            }
            public static void Main()
            {
                MyThreadTest StartMultiThreads = new MyThreadTest();
                StartMultiThreads.CreateThreads();
            }
}

余分なコードがあることは知っていますが、一般的に私の目標は 2 つのスレッドをシミュレートすることです。

デリゲートを実装し、最終的にカスタム イベントを使用して最初のスレッドから 2 番目のスレッドにメッセージを送信しようとする 2 番目のクラス (少なくともこれが私の最終目標です):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

   class Class1
   {
       public delegate void ShowMyMessage(object sender, EventArgs e);
       public event ShowMyMessage ShowIt;

       // Invoke the ShowIt event; called whenever I like it :)
       protected virtual void OnShowIt(EventArgs e)
       {
           if (ShowIt != null)
               ShowIt(this, e);
       }
   }

   class EventListener
   {
       private Class1 msg;

       public EventListener(Class1 msg)
       {
           Class1 Message = msg;
           // Add "ListChanged" to the Changed event on "List".
           Message.ShowIt += new ShowMyMessage(MessageShowIt);
       }

       // This will be called whenever the list changes.
       private void ListChanged(object sender, EventArgs e)
       {
           Console.WriteLine("This is called when the event fires.");
       }
   }

これが単なる愚かな間違いではないことはわかっていますが、これがイベントを作成する方法であり、どうすれば仕事を成功させることができるかを知る必要がありますか?

4

1 に答える 1

2

イベントを購読すると、オブジェクトのメソッドとインスタンスに関する情報が提供されます。しかし、スレッドについてではありません。

イベントは、発生したスレッドと同じスレッドで常に処理されます。同期的に。

したがって、イベントはスレッド間で通信するためのメカニズムではありません。

于 2013-01-21T15:51:41.380 に答える