受到師兄們和甲方的雙重**(開個玩笑),非要把深度學習模型加到現在的軟體上去,雖然感覺這是乙個必然事件,心裡還是mmp(剛上研一的機械小萌新真的什麼都不會啊qaq)。不過任務分配了還是要全力以赴的,然後就是不停的找資料找方法,找來找去都是那幾個相同的c#**,相同的python**(ok,那肯定能行吧)。。。。。
下面附上參考的資料,
import numpy as np
import sys
deffunc
(a,b)
: result=np.sqrt(
int(a)
*int
(b))
return result
if __name__ ==
'__main__'
:print
(func(sys.ar**[1]
,sys.ar**[2]
))
然後用anaconda prompt 先執行一下:
ok能執行,那後面就是希望能在textbox上輸出這個數值。
這部分也前輩們寫的其實都是差不多的,也就是主題的部分是一樣的,但是由於他們的結果只能夠在輸出欄中看到,而我是想要在控制項上顯示,所以做了一點點修改。
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.windows.forms;
using system.diagnostics;
//process程序類
using system.threading.tasks;
using system.windows;
namespace python_inte***ce
private
void
btn1_click
(object sender,
eventargs e)
public
void
runpython
(string sargname,
params
string
teps)
p.startinfo.arguments = sarguments;
//設定啟動的python需要的命令語句
p.startinfo.useshellexecute =
false
; p.startinfo.redirectstandardoutput =
true
; p.startinfo.redirectstandardinput =
true
; p.startinfo.redirectstandarderror =
true
; p.startinfo.createnowindow =
true
; p.
start()
; p.
beginoutputreadline()
;//在應用程式的重定向 standardoutput 流上開始進行非同步讀取操作。
p.outputdatareceived +
=new
datareceivedeventhandler
(p_outputdatareceived)
;
console.
readline()
; p.
waitforexit()
;}private
void
p_outputdatareceived
(object sender,
datareceivedeventargs e)
//這裡將方法給出了,然後也就在這裡執行
}private
void
form1_load
(object sender,
eventargs e)
}}
執行後效果就是這樣啦!
1、由於對程序類了解不多(剛開始學c#幾個月的小菜鳥),剛開始讀**都困難尤其是這一句,
p.outputdatareceived +
=new
datareceivedeventhandler
(p_outputdatareceived)
;
設定斷點一句句執行,發現系統在這句沒有直接跳到下面的方法中,而是從上到下執行;
後來意識到,這裡只是指定了這一種方法,只有到這個方法出現了,才去執行。
ps。如果我理解錯了,煩請大神多多指教啦
2、一開始除錯的過程中發現不管怎麼做,結果都顯示不到textbox上面(這裡首先排除了使用全域性變數的方法,因為考慮到後期需要處理的不是乙個簡單變數)。後來發現原來前輩們在宣告runpython函式的時候,把他宣告為靜態的了,以至於後面其他方法也都是靜態的。。。。。
public
static
void
runpythonscript
(string sargname,
string args ="",
params
string
teps)
static
void
p_outputdatareceived
(object sender,
datareceivedeventargs e)
public
static
void
(string text)
所以如果在等到處理python.exe中傳過來的資料的時候怎麼放不放到控制項上。
統統改掉傳值問題就能得到解決了!
3、注意多執行緒問題:解決完上面的問題,發現還是不行。。。。。
private
void
form1_load
(object sender,
eventargs e)
來看一下官方的解釋:獲取或設定乙個值,該值指示是否捕獲對錯誤執行緒的呼叫,這些呼叫在除錯應用程式時訪問控制項的 handle 屬性。
嗯。。看不懂。大概就是讓不同執行緒之間能傳值的意思吧。
基於C 呼叫OCX控制項的常用方法 推薦
小夥伴們在使用icp提供的各種能力進行整合開發時常常會遇到一些技術上的困擾,例如icp中很多介面是通過ocx控制項的方式提供的,如何呼叫這些介面,就成了乙個不大不小的問題,畢竟開發指南上可沒這些內容啊 別著急,今天我就給大家介紹一下c 中呼叫ocx介面的常用方法。y 開發環境 win7企業版,vs2...
C 反射動態呼叫dll中的方法,並返回結果
最近在看工廠開發模式,發現用到了反射,之前只聽說過也沒怎麼用過 所以花了點時間重新溫習了一遍 反射的作用是動態的載入某個dll 程式集 並執行該程式集中的某個方法,並返回結果 當然也可以給該方法傳遞引數 直接上 namespace assembly name 上邊寫乙個測試類,命名空間是assemb...
C 反射動態呼叫dll中的方法,並返回結果
最近在看工廠開發模式,發現用到了反射,之前只聽說過也沒怎麼用過 所以花了點時間重新溫習了一遍 反射的作用是動態的載入某個dll 程式集 並執行該程式集中的某個方法,並返回結果 當然也可以給該方法傳遞引數 namespace assembly name 上邊寫乙個測試類,命名空間是assembly n...