Итак, я хочу создать функцию для загрузки файла в golang, используя этот метод ниже, я встраиваю этот проект golang в C .dll, используя
go build -buildmode=c-shared -o patcher.dll main.go
Мне удалось использовать эту функцию в моем приложении C #чтобы получить прогресс загрузки файла, моя текущая функция (DownloadFfile) работает, если я просто печатаю ее напрямую с помощью DownloadFile (), однако я хочу получить прогресс асинхронно в моем приложении C #, но я не могу получить значение напрямую, поэтому яя думаю, что мне нужно вернуть целое число прогресса из моего приложения golang, но если я сделаю это, функция просто пойдет 1 раз (последний результат прогресса)
Вопрос в том, как сделать так, чтобы мой go func DownloadFile вызывался 1 разв моем приложении C #, но я все еще могу следить за прогрессом?Любая помощь будет оценена, спасибо.
func DownloadFile(){
// create client
client := grab.NewClient()
req, _ := grab.NewRequest(".", "http://www.golang-book.com/public/pdf/gobook.pdf")
// start download
fmt.Printf("Downloading %v...\n", req.URL())
resp := client.Do(req)
fmt.Printf(" %v\n", resp.HTTPResponse.Status)
// start UI loop
t := time.NewTicker(500 * time.Millisecond)
defer t.Stop()
Loop:
for {
select {
case <-t.C:
fmt.Printf("%.2f%",
//resp.BytesComplete(),
//resp.Size,
100*resp.Progress())
case <-resp.Done:
// download is complete
break Loop
}
}
// check for errors
if err := resp.Err(); err != nil {
fmt.Fprintf(os.Stderr, "Download failed: %v\n", err)
os.Exit(1)
}
// fmt.Printf("Download saved to ./%v \n", resp.Filename)
// Output:
// Downloading http://www.golang-book.com/public/pdf/gobook.pdf...
// 200 OK
// transferred 42970 / 2893557 bytes (1.49%)
// transferred 1207474 / 2893557 bytes (41.73%)
// transferred 2758210 / 2893557 bytes (95.32%)
// Download saved to ./gobook.pdf
}