SORU
26 HAZİRAN 2009, Cuma


AsyncCallback nedir?

AsyncCallback kullanımı nedir ve neden kullanılmalıdır?

CEVAP
26 HAZİRAN 2009, Cuma


Zaman uyumsuz yöntem işlem bittiğinde, AsyncCallback yöntem işlem sonrası stmts çalıştırılabilir otomatik olarak adlandırılır. Bu teknik ile veya zaman uyumsuz iş parçacığı için bir anket tamamlamak için beklemek gerek.

Bu kullanım geri aramaya Aynsc bazı açıklaması:

Geri Arama Modeli:Geri arama modeli aramayı tamamlamak için geri arama yöntemi geri arama ve ihtiyacımız olan her devlet dahil etmek için bir yöntem belirlemek gerekir. Geri arama modeli aşağıdaki örnekte görülebilir:

static byte[] buffer = new byte[100];

static void TestCallbackAPM()
{
    string filename = System.IO.Path.Combine (System.Environment.CurrentDirectory, "mfc71.pdb");

    FileStream strm = new FileStream(filename,
        FileMode.Open, FileAccess.Read, FileShare.Read, 1024,
        FileOptions.Asynchronous);

    // Make the asynchronous call
    IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length,
        new AsyncCallback(CompleteRead), strm);
}

Bu modelde, new AsyncCallback temsilci, işlem tamamlandığında çağırmak için bir yöntem belirtme (başka bir iş parçacığı üzerinde) yaratıyoruz. Buna ek olarak, aramanın devlet olarak ihtiyacımız olabilecek bir nesne belirtme. Bu örneğin, EndRead arayıp akışı kapatmak için ihtiyacımız olacak, çünkü akış nesnesi gönderiliyor.

Aramanın sonunda çağrılacak verdiğimiz yöntem bu biraz gibi görünecektir:

static void CompleteRead(IAsyncResult result)
{
    Console.WriteLine("Read Completed");

    FileStream strm = (FileStream) result.AsyncState;

    // Finished, so we can call EndRead and it will return without blocking
    int numBytes = strm.EndRead(result);

    // Don't forget to close the stream
    strm.Close();

    Console.WriteLine("Read {0} Bytes", numBytes);
    Console.WriteLine(BitConverter.ToString(buffer));
}

Diğer teknikler bekle-kadar-bitti ve yoklama.

Bekle-Kadar-Yapılmış ModeliBekle-kadar-model zaman uyumsuz çağrı başlatmak ve diğer işleri yapmak için izin verir. Diğer iş tamamlandığında, aramayı sonlandırmak için deneyebilirsiniz ve zaman uyumsuz çağrı tamamlanıncaya kadar engeller.

// Make the asynchronous call
strm.Read(buffer, 0, buffer.Length);
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null);

// Do some work here while you wait

// Calling EndRead will block until the Async work is complete
int numBytes = strm.EndRead(result);

Ya da bekle kolları kullanabilirsiniz.

result.AsyncWaitHandle.WaitOne();

Yoklama ModeliYoklama yöntemi benzer, kod IAsyncResult tamamlanmış olup olmadığını görmek için bir anket olacak bu istisna ile.

// Make the asynchronous call
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null);

// Poll testing to see if complete
while (!result.IsCompleted)
{
    // Do more work here if the call isn't complete
    Thread.Sleep(100);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • Project Mooncircle

    Project Moon

    6 Aralık 2009
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010