0

混乱していることについて少し確認が必要です。私はスレッドがJavaでどのように機能するか知っています:

new DialList(string a , string b).start(); // where DialList is a class

public class DialList extends Thread {
    public DialList(String a, string b) {
        FilePath = a; 
        ThreadLogFile = b"; 
    }

    public void run() {
        // some code to run in different thread
    }
}

ここで、C#で同じコードを実行したいと思います。run()にあるコードをメソッドに入れて、次のようなことをしますか?

 Thread t = new Thread (runcsharp);          // Kick off a new thread
 t.Start(); 
 static void runcsharp(parameters) {
     // code
 }

またはそれを行う他の方法はありますか?

4

2 に答える 2

1

私はいくつかの観察を持っています:

まず、Javaでスレッドを作成する方法は機能しますが、推奨される方法は、Runnableを拡張する代わりに実装することですThreadExecutorServiceこれにより、たとえばコードをフィードすることもできるため、同じコードを使用できる場所をより柔軟に設定できます。

new Thread(new DialList(string a , string b)).start();

public class DialList implements Runnable {
    public DialList(String a, string b) {
        FilePath = a; 
        ThreadLogFile = b"; 
    }

    public void run() {
        // some code to run in different thread
    }
}

次に、はい、C#でそのスニペットを使用できます。また、ラムダ式を使用することもできます。

Thread t = new Thread(
   o =>
   {
       // code
   });
t.Start(); 

キャプチャされた変数を変更できるため、C#のラムダはJavaの匿名クラスよりも強力です。これは便利な場合がありますが、足で自分を撃つための良い方法でもあります。

于 2012-09-05T22:38:28.973 に答える
0

C#で新しいスレッドを開始するには、いくつかの異なる方法があります。例えば:

static void run()
{
    Thread t = new Thread(new ThreadStart(WriteY));
    t.Start();   // Run WriteY on the new thread.
}

void WriteY()
{
    // do something
}

これは、にパラメータがないことを前提としていることに注意してWriteYください。その場合は、ParameterizedThreadStartデリゲートを使用する必要があります。詳細については、Joe Albahariの優れた(そして無料の)電子ブックを参照してください。

編集:私がこれを正しく理解していればDialList、新しいスレッドに渡したいタイプのオブジェクトがあります。これは、C#で次のように行うことができます。

void WriteY(DialList dl)
{ // do something with the DialList
}

var dl = new DialList(AString, BString);
Thread T = new Thread( () => WriteY(dl) );
于 2012-09-05T21:34:26.670 に答える