- - PR -
int xを戻り値とするint method();をThreadで実行したい
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-08 14:12
コールバックとわかんなかったので、デリゲートとかいうのを使ってできませんか?
|
|
投稿日時: 2005-11-08 14:43
できますよ。
Delegate を宣言してインスタンスを作って BeginInvoke してください。 |
|
投稿日時: 2005-11-08 14:45
デリゲートとかいうのを使ってできるみたいですね。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpovrasynchronousprogrammingoverview.asp |
|
投稿日時: 2005-11-09 10:05
public AsyncMain
{ static void Main(string[] args) { AsyncDemo ad = new AsyncDemo(); AsyncDelegate dlgt = new AsyncDelegate(ad.Method) IAsyncResult ar = dlgt.BeginInvoke(); } public AsyncDemo { public int[] Method() { {処理} return x; } } public delegate int[] MethodDelegate(); これだとBeginInvokeに何か引数を入れないとだめみたいなのですが、どうすればいいでしょうか。xを入れてみましたがだめでした。 |
|
投稿日時: 2005-11-09 11:31
上の6行目のAsyncDelegateはMethodDelegateのまちがいです。
|
|
投稿日時: 2005-11-09 12:36
google で delegate, callback, BeginInvoke で検索するといくつか出てきますが
菊池さんの Blog がわかりやすいです。 http://www.ailight.jp/blog/kazuk/articles/6287.aspx BeginInvoke の後ろ2つの引数は使用しないのであれば null でも大丈夫です。 ただし、今回は int x をどうにか処理したいようなので int x を処理するような callback を作成し、 これを AsyncCallback オブジェクトとして渡してあげればいいのではないでしょうか? |
|
投稿日時: 2005-11-09 15:58
IAsyncResult ar = dlgt.BeginInvoke( new AsyncCallback(CallbackMethod),null);
と、BeginInvokして static void CallbackMethod(IAsyncResult ar) { CalcuDelegate dlgt = (CalcuDelegate) ar.AsyncState; int[] x = dlgt.EndInvoke(ar); } で、CallBackMethodでint[] xが取り出せたのですが、protected override void OnPaint(PaintEventArgs pea){}でint[] xを使いたいのですが、どうすればOnPaintメソッド内で使えるようになりますか? |
|
投稿日時: 2005-11-09 16:09
上のCalcuDelegateはMethodDelegateの間違いです。
|