1

ここからのラムダ演算子に関する回答を使用して、パラメーターを受け入れて正常に動作するスレッドを取得しました。ただし、スレッドからデータを取り戻すことができるようにしたいと思います。コードは次のようになります。

namespace Renamer
{
    class RenameThread
    {
        public Thread StartRename(bool commit, ICollection checkeditems, ArrayList rules)
        {
            var t = new Thread(() => doRename(commit, checkeditems, rules));
            t.Start();
            return t;

        }
        private void doRename(bool commit, ICollection checkeditems, ArrayList rules)
        {
            ArrayList filenames = new ArrayList();
            ArrayList newfilenames = new ArrayList();
            filenames.AddRange(checkeditems);
            //do stuff with filenames
            //I want to be able to return newfilenames (or perhaps some object that contains it)
        }
    }
}

ボタンをクリックすると呼び出されます。

private void btnTest_Click(object sender, EventArgs e)
{
    RenameThread rt = new RenameThread();
    Thread renameThread = rt.StartRename(false, clbFiles.CheckedItems, rules);
    renameThread.Join();
}

RunnableJavaでは、必要に応じてスレッドのメンバーとフィールドに直接アクセスできるように実装するだけでしたが、継承できないためThread、何をすべきかについて少し戸惑っています。

4

1 に答える 1

2

タスクを使用します:

var renameTask = Task.Factory.StartNew(() => Rename(...));

Joinこれで、にアクセスして、と同様にタスクが終了するのを待つことができますResult

var newFilenames = renameTask.Result;

または、非同期で行うこともできます。

renameTask.ContinueWith(t => Console.WriteLine(t.Result));

私の答えは、それRenameがを返すメソッドであると想定していますstring

于 2013-02-01T11:27:10.457 に答える